Katalog CVE

CVE-2026-15891

WysokieCVSS 7.5
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.34%

Percentyl 27 - wyżej niż 27% wszystkich znanych CVE

Streszczenie

W kliencie MQTT-SN (Zephyr, plik subsys/net/lib/mqtt_sn/mqtt_sn.c) funkcja process_ping() usuwa rekord bramy po wyczerpaniu ponowień PINGREQ, ale wynik makra SYS_SLIST_PEEK_HEAD_CONTAINER jest odrzucany, przez co zmienna gw pozostaje NULL. Następnie kod dereferuje NULL (gw->gw_id) i przekazuje go do mqtt_sn_gw_destroy(), co prowadzi do k_mem_slab_free(&gateways, NULL) — wywołania k_panic() przy włączonym CONFIG_MEM_SLAB_POINTER_VALIDATE lub uszkodzenia listy wolnych bloków alokatora w konfiguracji domyślnej. Podatność jest zdalnie wyzwalana przez złośliwą lub przejętą bramę MQTT-SN (bądź atakującego w tej samej sieci), która przestaje odpowiadać na PINGREQ.

Ocena ryzyka

Atakujący może zdalnie doprowadzić do awarii lub paniki jądra klienta MQTT-SN, powodując odmowę usługi (utratę dostępności). W środowiskach, gdzie adres 0 jest zapisywalny, możliwe jest także ciche uszkodzenie alokatora pamięci, co może prowadzić do dalszej niestabilności systemu.

Rekomendacja

Zaktualizuj Zephyr do wersji zawierającej poprawkę przypisującą wartość zwracaną makra do zmiennej gw. Do czasu wdrożenia poprawki rozważ włączenie CONFIG_MEM_SLAB_POINTER_VALIDATE, aby zamienić ciche uszkodzenie pamięci na kontrolowaną panikę, oraz ograniczenie komunikacji MQTT-SN do zaufanych bram.

Powiązane podatności

Oryginalny opis (angielski, źródło NVD)

The MQTT-SN client keepalive handler process_ping() in subsys/net/lib/mqtt_sn/mqtt_sn.c removes the gateway record after PINGREQ retries are exhausted. It invoked SYS_SLIST_PEEK_HEAD_CONTAINER(&client->gateways, gw, next) but discarded the result. That macro is a pure expression that does not assign to gw, so gw retained its NULL initializer regardless of the list contents. The code then dereferences the NULL gw (gw->gw_id) and passes it to mqtt_sn_gw_destroy(), reaching k_mem_slab_free(&gateways, NULL). With CONFIG_MEM_SLAB_POINTER_VALIDATE enabled this triggers k_panic(); in the default configuration it performs a write through the NULL pointer ((char )mem = slab->free_list;) and corrupts the slab free list. The outcome is a crash/kernel panic or, on targets where address 0 is writable, silent memory-allocator corruption. The vulnerable branch runs whenever the connected MQTT-SN gateway fails to answer keepalive PINGREQs for the configured number of retries. This condition is controlled by the remote peer: a malicious or compromised gateway, or an on-path/adjacent attacker that advertises itself as a gateway and then stops responding (or blackholes the real gateway's PINGRESPs), forces the client into the defect. MQTT-SN runs over UDP and no authentication is required. The impact is a remotely triggerable denial of service (availability) of the affected MQTT-SN client; there is no attacker-controlled data written. The sibling remover process_advertise() uses SYS_SLIST_FOR_EACH_CONTAINER_SAFE and is not affected. The fix assigns the macro's return value to gw.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS