NanoMQ MQTT Broker (NanoMQ) — это универсальная платформа обмена сообщениями Edge. До версии 0.24.10 в файле webhook_inproc.c NanoMQ функцияook_work_cb() обрабатывала сообщения nng, анализируя тело сообщения с помощью cJSON_Parse(body). Тело получается из nng_msg_body(msg), который представляет собой двоичный буфер без гарантированного нулевого терминатора.
Это приводит к чтению за пределами выделенного буфера (OOB-чтение), поскольку cJSON_Parse читает до тех пор, пока не найдет \0, потенциально получая доступ к памяти за пределами выделенного буфера (например, метаданные nng_msg или соседняя куча/стек). Проблема часто маскируется заполнением выделения nng (дополнительные 32 байта нулей для размеров, не равных степени двойки, <1024 или невыровненных). Переполнение надежно инициируется, когда длина полезных данных JSON равна степени двойки >=1024 (без добавления заполнения).
Эта проблема исправлена в версии 0.24.10.
Показать оригинальное описание (EN)
NanoMQ MQTT Broker (NanoMQ) is an all-around Edge Messaging Platform. Prior to version 0.24.10, in NanoMQ's webhook_inproc.c, the hook_work_cb() function processes nng messages by parsing the message body with cJSON_Parse(body). The body is obtained from nng_msg_body(msg), which is a binary buffer without a guaranteed null terminator. This leads to an out-of-bounds read (OOB read) as cJSON_Parse reads until it finds a \0, potentially accessing memory beyond the allocated buffer (e.g., nng_msg metadata or adjacent heap/stack). The issue is often masked by nng's allocation padding (extra 32 bytes of zeros for non-power-of-two sizes <1024 or non-aligned). The overflow is reliably triggered when the JSON payload length is a power-of-two >=1024 (no padding added). This issue has been patched in version 0.24.10.
Характеристики атаки
Последствия
Строка CVSS v3.1
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Emqx Nanomq
cpe:2.3:a:emqx:nanomq:*:*:*:*:*:*:*:*
|
— |
0.24.10
|