CVE: CVE-2026-73256
Продукт: Debian
Дата публикации: 20.08.2026
Критичность: CRITICAL
CVSS: 9.1 (3.1)
EPSS: 0,40%; процентиль 33,16%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
Уязвимость CVE-2026-73256 (CVSS 9.1) затрагивает библиотеку Mongoose в Debian. Ошибка в проверке версии HTTP-протокола позволяет удаленным атакующим выполнять HTTP-смуглинг через прокси HTTP/1.0, что приводит к несанкционированному доступу или изменению состояния системы. Исправление доступно в версиях 7.22+ds-1 для веток forky и sid.
Основные характеристики
Уязвимость классифицируется как критическая (CVSS 3.1: 9.1) и относится к категории CWE-444 (HTTP Request Smuggling). Она возникает из-за логической ошибки в функции http_cb() файла src/http.c библиотеки Mongoose. Ошибка проявляется только в конфигурациях, где Mongoose работает за обратным прокси HTTP/1.0. Атакующий может отправить запрос с заголовком Transfer-Encoding: chunked и конфликтующим фреймингом. Из-за некорректной проверки длины строки протокола переменная is_http_1_0 никогда не устанавливается в true, даже если протокол HTTP/1.0. В результате Mongoose обрабатывает кодировку chunked, которую прокси HTTP/1.0 игнорирует, что приводит к рассинхронизации интерпретации запросов между прокси и бэкендом.
Какие продукты и версии затронуты
В Debian уязвимость затрагивает исходный пакет mongoose. Затронуты следующие релизы:
- Debian forky: уязвимы версии до 7.22+ds-1. Исправленная версия 7.22+ds-1 доступна в репозитории. В текущем репозитории forky доступна версия 7.23+ds-1.
- Debian sid (unstable): уязвимы версии до 7.22+ds-1. Исправленная версия 7.22+ds-1 доступна. В репозитории sid доступна версия 7.23+ds-1.
Данные подтверждены Debian Security Tracker. Другие версии Debian (stable, testing) в предоставленных данных не указаны, однако рекомендуется проверить наличие пакета mongoose в используемой системе.
Причина уязвимости
Причиной уязвимости является ошибка в логике определения версии HTTP-протокола в функции http_cb() (src/http.c). Функция проверяет длину строки протокола (hm.proto.len) на условие «больше 8», что является невозможным условием, поскольку функция mg_http_parse() требует ровно 8-байтовую строку протокола (например, "HTTP/1.0\r\n"). Из-за этой ошибки флаг is_http_1_0 никогда не устанавливается в true. В результате библиотека Mongoose не распознает запросы HTTP/1.0 как таковые и продолжает обрабатывать их с учетом возможностей HTTP/1.1, включая поддержку Transfer-Encoding: chunked. Это создает расхождение в интерпретации тела запроса между прокси HTTP/1.0 (который игнорирует chunked) и Mongoose (который его обрабатывает).
Как работает атака
Атака использует механизм HTTP Request Smuggling. Атакующий отправляет HTTP-запрос через прокси HTTP/1.0. Запрос содержит заголовок Transfer-Encoding: chunked и конфликтующие данные фрейминга (например, Content-Length, указывающий на конец запроса для прокси, но не для Mongoose).
- Прокси HTTP/1.0, не поддерживающий chunked, игнорирует этот заголовок и определяет конец запроса по Content-Length или другим правилам HTTP/1.0.
- Mongoose, из-за ошибки в is_http_1_0, интерпретирует запрос как HTTP/1.1 и обрабатывает Transfer-Encoding: chunked.
- Разница в интерпретации приводит к тому, что часть данных, предназначенная для следующего запроса, интерпретируется Mongoose как часть текущего запроса, или наоборот.
- Это позволяет атакующему «спрятать» вредоносный запрос внутри безобидного, обходя аутентификацию или изменяя состояние системы.
Условия успешной эксплуатации
Для успешной эксплуатации требуются следующие условия:
- Целевая система использует библиотеку Mongoose версии ниже 7.22.
- Mongoose развернут за обратным прокси, который использует протокол HTTP/1.0 для связи с Mongoose.
- Атакующий имеет сетевой доступ к прокси или может отправить запрос, который будет перенаправлен на Mongoose.
- Отсутствие аутентификации на уровне Mongoose или возможность обхода аутентификации через смуглинг.
Возможный сценарий атаки
Атакующий идентифицирует систему, использующую Mongoose за прокси HTTP/1.0. Он отправляет специально сформированный HTTP-запрос с заголовком Transfer-Encoding: chunked. Прокси HTTP/1.0 игнорирует этот заголовок и передает часть данных на Mongoose, считая запрос завершенным. Mongoose, интерпретируя запрос как HTTP/1.1, продолжает чтение данных согласно правилам chunked. В результате следующий легитимный запрос пользователя или часть данных текущего запроса интерпретируется Mongoose как новый HTTP-запрос. Это может привести к выполнению несанкционированных действий, таких как изменение конфигурации, доступ к защиченным ресурсам или выполнение команд, если Mongoose предоставляет такие возможности.
Есть ли публичный эксплойт
В предоставленных источниках нет информации о публичных эксплоитах или PoC-коде. Уязвимость описана в техническом советнике безопасности GitHub (GHSA-mgp5-rjrv-h5j3), но рабочий код атаки не опубликован. Отсутствие публичного эксплойта не означает отсутствие риска эксплуатации в реальных атаках.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для этой уязвимости не определены. Общие признаки атаки могут включать:
- Необычные HTTP-запросы с заголовком Transfer-Encoding: chunked, отправляемые на серверы, ожидающие HTTP/1.0.
- Рассинхронизация в журналах прокси и бэкенда.
- Необычные изменения состояния системы или несанкционированные действия, выполненные от имени сервиса Mongoose.
Эти признаки неспецифичны и могут быть вызваны другими причинами.
Как обнаружить атаку
Для обнаружения потенциальной эксплуатации рекомендуется:
- Анализировать журналы HTTP-прокси и Mongoose на наличие запросов с Transfer-Encoding: chunked.
- Проверять журналы на рассинхронизацию между прокси и бэкендом.
- Мониторить необычные изменения в конфигурации или данных, управляемых Mongoose.
- Использовать системы обнаружения вторжений (IDS) с правилами для HTTP Request Smuggling.
Как проверить свою версию
Для проверки версии установленного пакета mongoose в Debian используйте следующие команды:
Bash:
apt-cache policy mongoose
dpkg-query -W -f='${Package} ${Version}\n' mongoose
Замените <имя-пакета> на mongoose, если используете общие команды. Сравните полученную версию с уязвимыми версиями (ниже 7.22+ds-1).
Исправление
Для устранения уязвимости обновите пакет mongoose до версии 7.22+ds-1 или выше. В Debian forky и sid исправленная версия уже доступна. Выполните обновление:
Bash:
sudo apt update
sudo apt install mongoose
Убедитесь, что система использует последнюю доступную версию из репозитория.
Временные меры защиты
До обновления рекомендуется:
- Отключить поддержку Transfer-Encoding: chunked в Mongoose, если это возможно через конфигурацию.
- Изменить конфигурацию прокси для использования HTTP/1.1 при связи с Mongoose, если это технически выполнимо.
- Ограничить доступ к Mongoose только из доверенных сетей.
- Внедрить WAF (Web Application Firewall) с правилами для блокировки запросов с Transfer-Encoding: chunked.
Как проверить устранение уязвимости
После обновления проверьте версию пакета:
Bash:
dpkg-query -W -f='${Package} ${Version}\n' mongoose
Убедитесь, что версия равна 7.22+ds-1 или выше. Проверьте журналы на отсутствие ошибок после обновления. Убедитесь, что прокси и Mongoose корректно взаимодействуют.
Вывод
CVE-2026-73256 представляет серьезный риск для систем, использующих Mongoose за прокси HTTP/1.0. Уязвимость позволяет выполнять HTTP-смуглинг, что может привести к несанкционированному доступу. Обновление до версии 7.22+ds-1 или выше является основным методом защиты. Временные меры включают изменение конфигурации прокси и ограничение доступа.
Официальные источники
История обновлений статьи
- 21.08.2026 — Опубликована первая версия материала.
- 23.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
Последнее редактирование:
