W serwerze MQTT systemu Contiki-NG odkryto krytyczny błąd przepełnienia bufora (buffer overflow) w funkcji parse_publish_vhdr(), umożliwiający zdalne wykonanie kodu. Brak weryfikacji długości danych wejściowych pozwala atakującemu bez żadnego uwierzytelnienia przejąć kontrolę nad urządzeniem.
▸ Pokaż oryginał (EN)
An issue was discovered in the MQTT server in Contiki-NG before 4.2. The function parse_publish_vhdr() that parses MQTT PUBLISH messages with a variable length header uses memcpy to input data into a fixed size buffer. The allocated buffer can fit only MQTT_MAX_TOPIC_LENGTH (default 64) bytes, and a length check is missing. This could lead to Remote Code Execution via a stack-smashing attack (overwriting the function return address). Contiki-NG does not separate the MQTT server from other servers and the OS modules, so access to all memory regions is possible.
Funkcja parse_publish_vhdr() przetwarza wiadomości MQTT PUBLISH ze zmienną długością nagłówka i kopiuje dane wejściowe do bufora o stałym rozmiarze (MQTT_MAX_TOPIC_LENGTH, domyślnie 64 bajty) przy użyciu memcpy. Brakuje sprawdzenia długości kopiowanych danych, co umożliwia nadpisanie obszarów stosu poza przydzielonym buforem. Atakujący może nadpisać adres powrotu funkcji (stack-smashing), przekierowując wykonanie kodu do własnego payload. Dodatkowo Contiki-NG nie izoluje serwera MQTT od pozostałych modułów systemu operacyjnego, przez co atak daje dostęp do wszystkich regionów pamięci.
Atakujący zdalny, nieuwierzytelniony może wykonać dowolny kod (RCE) na podatnym urządzeniu z pełnym dostępem do pamięci systemu, co w praktyce oznacza całkowite przejęcie kontroli nad urządzeniem.
Należy zaktualizować Contiki-NG do wersji 4.2 lub nowszej. Szczegóły dostępne w referencjach producenta pod adresem https://github.com/contiki-ng/contiki-ng/issues/600
Contiki-NG we wszystkich wersjach przed 4.2
CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HContiki Ng
APPContiki-Ng< 4.2
Powiązane podatności
Contiki-Ng: nieprawidłowa losowość TCP ISN umożliwia ataki na sesje sieciowe
Off-by-one w bazie Antelope (Contiki-NG) — odczyt poza buforem
Out-of-bounds read w stosie SNMP systemu Contiki-NG
Buffer overflow w parsowaniu DNS w Contiki i Contiki-NG (NAT64)
Buffer overflow w obsłudze SNMP bulk get w Contiki-NG (RCE)