Исследователь нашёл три уязвимости в Mongoose — затронуты сотни миллионов IoT-устройств
В Mongoose — встраиваемом веб-сервере, который работает на сотнях миллионов IoT-устройств — нашли три уязвимости: обход mTLS-аутентификации, pre-auth RCE через переполнение кучи и RCE через один UDP-пакет.
Новости TprogerВ Mongoose — встраиваемом веб-сервере, который работает на сотнях миллионов IoT-устройств — нашли три уязвимости: обход mTLS-аутентификации, pre-auth RCE через переполнение кучи и RCE через один UDP-пакет. Патч уже есть.
Исследователь Симоне Маргарителли (evilsocket) раскрыл три CVE в Mongoose версий 7.0–7.20. Mongoose — однофайловая сетевая библиотека на C от Cesanta, которая поддерживает HTTP/HTTPS, WebSocket, MQTT и mDNS. Её используют Siemens, Schneider Electric, Broadcom, Bosch, Google, Samsung, Qualcomm и Caterpillar — от промышленных контроллеров и IP-камер до автомобильных систем.
Ключевые выводы
- CVE-2026-5246 — полный обход mTLS при использовании P-384 CA: сервер принимает любой клиентский сертификат без проверки подписи
- CVE-2026-5244 — heap overflow при разборе RSA-ключа в TLS handshake → pre-auth RCE как root (CVSS 7.3)
- CVE-2026-5245 — stack overflow через один UDP-пакет mDNS → RCE на встраиваемых устройствах (CVSS 5.6)
- Затронуты версии 7.0–7.20, исправлено в 7.21
- Уязвимы сотни миллионов устройств: промышленные контроллеры, камеры, шлюзы умного дома
Три уязвимости, три вектора атаки
Все три бага связаны со встроенной реализацией TLS 1.3 (MG_TLS_BUILTIN) и mDNS в Mongoose. Аутентификация не требуется ни для одного из них.
Обход mTLS — сертификат не проверяется
CVE-2026-5246 (CVSS 5.6). Функция mg_tls_verify_cert_signature() при P-384 CA-сертификате возвращает успех без какой-либо проверки подписи. В коде буквально написано: ignore secp386 for now — и return 1. Любой клиентский сертификат от любого CA принимается.
P-384 — распространённый выбор для CA, поскольку обеспечивает 192-битную безопасность против 128-бит у P-256. Если ваш Mongoose-сервер с mTLS использует P-384 CA — любой клиент получит доступ.
Heap overflow в TLS handshake — RCE как root
CVE-2026-5244 (CVSS 7.3). При разборе клиентского сертификата во время TLS handshake Mongoose копирует RSA-ключ в фиксированный 528-байтный буфер в куче — без проверки длины. Атакующий отправляет сертификат с 8192-битным RSA-ключом (~1037 байт), что вызывает переполнение на 509 байт.
На встраиваемых MIPS-устройствах без защиты (нет ASLR, нет PIE, исполняемая куча — это норма для IoT) переполнение перезаписывает указатель на функцию mg_connection->fn и позволяет выполнить произвольный код как root. Атака происходит до обработки HTTP-запроса.
mDNS — RCE одним UDP-пакетом
CVE-2026-5245 (CVSS 5.6). Функция handle_mdns_record() упаковывает четыре DNS-записи в 282-байтный буфер на стеке без проверки границ. При стандартных IoT-метаданных (63-символьное имя хоста, ~450 байт TXT) итоговый размер ответа — 668 байт, то есть переполнение на 386 байт. На MIPS с исполняемым стеком — надёжный RCE.
Что делать
- Обновить Mongoose до версии 7.21 — патчи для всех трёх CVE включены
- Если обновление невозможно — переключиться с MG_TLS_BUILTIN на OpenSSL или mbedTLS
- Отключить mDNS, если он не используется
- Не использовать P-384 CA-сертификаты с Mongoose ниже 7.21
- Частичные меры (смена TLS-бэкенда, отключение mDNS, отказ от P-384) не защищают от всех трёх CVE одновременно — обновление до 7.21 остаётся единственным полным решением
Маргарителли отмечает, что на встраиваемых устройствах без hardening (без ASLR, PIE, с исполняемой кучей и стеком) — а это большинство IoT — уязвимости следует считать критическими.
FAQ
Что такое Mongoose?
Mongoose — однофайловая кроссплатформенная сетевая библиотека на C от Cesanta. Поддерживает HTTP/HTTPS, WebSocket, MQTT и mDNS. Предназначена для встраиваемых систем и IoT-устройств, где полноценный OpenSSL слишком тяжёл. По данным разработчиков, развёрнута на сотнях миллионов устройств.
Нужна ли аутентификация для эксплуатации?
Нет. Все три уязвимости — pre-auth: heap overflow срабатывает во время TLS handshake (до HTTP-запроса), mDNS overflow — через один UDP-пакет, а mTLS bypass как раз позволяет обойти аутентификацию.
Какие устройства затронуты?
Любое устройство с Mongoose 7.0–7.20, использующее MG_TLS_BUILTIN или mDNS: промышленные контроллеры (PLC), SCADA-шлюзы, IP-камеры, шлюзы умного дома, медицинские устройства, автомобильные информационно-развлекательные системы.
Полный технический разбор с кодом эксплойтов — в блоге evilsocket.