CVE-2026-71263
KrytyczneCVSS 9.1Streszczenie
W porcie LINUXTCP FreeModbus w funkcji xMBPortTCPPool() występuje błąd off-by-one w sprawdzaniu granic. Warunek `if (usTCPFrameBytesLeft > MB_TCP_BUF_SIZE)` zamiast >= pozwala na odebranie ramki o długości 263 bajtów, co powoduje przepełnienie bufora o 7 bajtów. Pojedynczy pakiet Modbus TCP może wywołać przepełnienie.
Ocena ryzyka
Atakujący bez uwierzytelnienia może spowodować awarię usługi lub potencjalnie wykonać dowolny kod. Może to zakłócić działanie systemów przemysłowych.
Rekomendacja
Zaktualizuj FreeModbus do wersji z poprawką lub zastosuj łatkę zmieniającą warunek na >=. Ogranicz dostęp do portu Modbus TCP.
Oryginalny opis (angielski, źródło NVD)
The LINUXTCP port of FreeModbus contains an off-by-one bounds check in xMBPortTCPPool() (demo/LINUXTCP/port/porttcp.c). The check `if (usTCPFrameBytesLeft > MB_TCP_BUF_SIZE)` uses a strict greater-than comparison instead of greater-than-or-equal against the 263-byte MB_TCP_BUF_SIZE limit. An MBAP frame with a Length field of 264 makes usTCPFrameBytesLeft equal to 263, which passes the flawed check, and the subsequent recv() call writes up to 263 bytes starting at buffer offset 7 into the 263-byte static buffer aucTCPBuf, overflowing it by 7 bytes into the adjacent static variable usTCPBufPos. A single crafted, unauthenticated Modbus TCP packet triggers the overflow, since Modbus has no built-in authentication.

