nanoMODBUS до версии 1.23.0 содержит запись за пределами границ в функции Recv_read_device_identification_res() на стороне клиента Modbus (FC 0x2B/MEI 0x0E, чтение идентификации устройства) в файле nanomodbus.c. Поле object_length, предоставленное сервером (0–246), проверяется только на соответствие оставшемуся размеру PDU (res_size_left) и никогда не проверяется на соответствие параметру buffers_length, предоставленному вызывающей стороной. После копирования данных с помощью strncpy(buffers_out[buf_index], str, buffers_length) код безоговорочно записывает NUL-терминатор в buffers_out[buf_index][object_length].
Когда вредоносный или скомпрометированный сервер Modbus отправляет ответ с длиной объекта, превышающей или равной длине буфера клиента, эта запись NUL попадает за конец буфера, предоставленного вызывающей стороной, повреждая соседний стек или память кучи на клиенте.
Показать оригинальное описание (EN)
nanoMODBUS through v1.23.0 contains an out-of-bounds write in the Modbus client-side recv_read_device_identification_res function (FC 0x2B/MEI 0x0E, Read Device Identification) in nanomodbus.c. The server-supplied object_length field (0-246) is validated only against the remaining PDU size (res_size_left) and is never validated against the caller-supplied buffers_length parameter.
Характеристики атаки
Последствия
Строка CVSS v3.1