Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
multiparty-CVE-2026-8161 — Доказательство концепции эксплуатации для CVE-2026-8161, уязвимости типа «отказ в обслуживании» в multiparty multipart parser, демонстрирующей загрязнение прототипа, приводящее к необработанному исключению и сбою. | Kitploit
Инструменты/GitHubGitHub/ser0n-ath/multiparty-cve-2026-8161
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасность
GitHubser0n-ath/multiparty-cve-2026-8161

multiparty-CVE-2026-8161

Доказательство концепции эксплуатации для CVE-2026-8161, уязвимости типа «отказ в обслуживании» в multiparty multipart parser, демонстрирующей загрязнение прототипа, приводящее к необработанному исключению и сбою.

Репозиторий
3 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-8161

Доказательство концепции CVE-2026-8161 (Multiparty)

Описание

[email protected] и более ранние версии уязвимы к отказу в обслуживании из-за необработанного исключения.

Парсер сохраняет загруженные поля и файлы в обычных JavaScript-объектах и небезопасно различает ключи, принадлежащие парсеру, от унаследованных свойств объекта. Специально сформированное имя multipart-поля может заставить парсер прочитать неожиданные значения из цепочки прототипов и завершиться с ошибкой при обработке загрузки.

Любой сервис, принимающий multipart-загрузки через уязвимые версии multiparty, может быть затронут.

Как это работает

Проблема возникает потому, что fields и files являются обычными JavaScript-объектами, но используются как безопасные карты «ключ-значение» для имён, контролируемых пользователем.

root@kitploit:~
var fieldsArray = fields[name] || (fields[name] = [])
fieldsArray.push(value)

var filesArray = files[name] || (files[name] = [])
filesArray.push(file)

Проблема в том, что fields[name] и используют обычный поиск свойств JavaScript. Для обычных объектов такой поиск может вернуть унаследованные свойства из цепочки прототипов вместо только тех значений, которые хранятся в самом объекте.

files[name]

Когда name равно __proto__, JavaScript может разрешить его через цепочку прототипов и вернуть унаследованный объект прототипа вместо undefined. Поскольку это значение является истинным, присваивание по умолчанию пропускается, и парсер никогда не создаёт настоящий массив для этого поля.

Патч исправляет это, доверяя только ключам, которые принадлежат непосредственно объекту:

root@kitploit:~
var filesArray = Object.prototype.hasOwnProperty.call(files, name)
  ? files[name]
  : undefined

Затем парсер добавляет значение только тогда, когда сохранённое значение действительно является массивом, в противном случае он инициализирует новый:

root@kitploit:~
if (Array.isArray(filesArray)) {
  filesArray.push(file)
} else {
  files[name] = [file]
}

Когда .push() вызывается для значения, которое не является массивом, выбрасывается TypeError. Поскольку это происходит внутри асинхронного процесса парсинга Multiparty, обычная обработка ошибок на стороне вызывающего кода может не перехватить её, что позволяет исключению завершить процесс.

Хронология

  • 2026-01-12: Уязвимость сообщена мейнтейнерам multiparty.
  • 2026-01-17: Отчёт принят, начата работа по устранению.
  • 2026-02-14: Начата скоординированная проверка с @pillarjs/security-triage.
  • 2026-02-16: Обсуждение патча -> Object.prototype.hasOwnProperty.call(...).
  • 2026-03-29: Заголовок и метаданные рекомендации обновлены с учётом влияния отказа в обслуживании.
  • 2026-04: Подход к устранению проверен и одобрен.
  • 2026-05-08: Рекомендация финализирована, зарезервирован CVE-2026-8161.
  • 2026-05-11: Исправление объединено в pillarjs:master.

Демонстрационное использование

Запустите среду mocklab и отправьте тестовую нагрузку на обе цели:

root@kitploit:~
docker compose up -d
python3 secdos.py -u http://localhost:8080/api/submit
python3 secdos.py -u http://localhost:8081/api/submit

Уязвимая цель завершится с ошибкой и вернёт [PASS]. Исправленная цель безопасно обработает запрос и вернёт [FAIL].

При повторном запуске против уязвимого сервера сначала перезапустите его

Обзор настройки

Уязвимый сервер

  • Доступ на localhost:8080
  • Nginx-сервер, выступающий в роли обратного прокси, при сбое отображает страницу ошибки со статусом 502
  • Nginx разрешает адрес уязвимого сервера по имени службы
  • Использует multiparty 4.2.3 (уязвимая версия)

Исправленный сервер

  • Запущен и доступен на localhost:8081
  • Nginx не требуется
  • Использует multiparty 4.3.0 (исправленная версия)

Сборка исправленного образа из dockerfile требует аргумент сборки PATCHED=1

Ссылки

https://github.com/pillarjs/multiparty/security/advisories/GHSA-qxch-whhj-8956 https://github.com/pillarjs/multiparty/commit/8ee6aca09aca29e923da48da8260c87aa964b282

Скачать инструмент