CVE-2026-5589
ŚrednieCVSS 6.3Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 12 - wyżej niż 12% wszystkich znanych CVE
Streszczenie
Niedomiar liczby całkowitej w funkcji bt_mesh_sol_recv() w obsłudze zapytań Bluetooth Mesh (subsys/bluetooth/mesh/solicitation.c) prowadzi do zapisu poza dozwolonym obszarem. Gdy CONFIG_BT_MESH_OD_PRIV_PROXY_SRV jest włączone, funkcja analizuje ramki PDU zapytań z surowych reklam BLE. Pętla parsowania AD odczytuje kontrolowaną przez atakującego długość (reported_len) i oblicza reported_len - 3 bez sprawdzania, czy reported_len >= 3. Gdy reported_len jest mniejsze niż 3, odejmowanie daje ujemną wartość, która omija zabezpieczenie długości i jest niejawnie konwertowana na bardzo duży rozmiar size_t przy przekazywaniu do net_buf_simple_pull_mem(). W kompilacjach bez asercji zawija to długość bufora i przesuwa wskaźnik danych daleko poza zakres, powodując odczyt z nieprawidłowej pamięci. Urządzenie BLE w pobliżu może to wywołać za pomocą reklamy niełączącej z strukturą AD UUID16 i spreparowaną długością, bez konieczności parowania lub wcześniejszego skojarzenia, potencjalnie prowadząc do odmowy usługi lub zdalnego wykonania kodu.
Ocena ryzyka
Atakujący w zasięgu Bluetooth może spowodować awarię systemu lub przejąć nad nim kontrolę bez żadnej autoryzacji, co stanowi poważne zagrożenie dla urządzeń korzystających ze stosu Bluetooth Mesh Zephyra.
Rekomendacja
Zaleca się zastosowanie poprawek dostarczonych przez dostawcę stosu Bluetooth Mesh (np. Zephyr) oraz włączenie asercji w kompilacjach produkcyjnych, jeśli to możliwe.
Inne podatności w Zephyr Bluetooth Mesh
Oryginalny opis (angielski, źródło NVD)
An integer underflow in bt_mesh_sol_recv() in the Bluetooth Mesh solicitation handling (subsys/bluetooth/mesh/solicitation.c) leads to an out-of-bounds write. When CONFIG_BT_MESH_OD_PRIV_PROXY_SRV is enabled, the function parses solicitation PDUs from raw BLE advertising payloads. The AD parsing loop reads an attacker-controlled length byte (reported_len) and computes reported_len - 3 without checking that reported_len >= 3. When reported_len is less than 3, the subtraction is performed in signed int arithmetic and yields a negative value that bypasses the length guard and is then implicitly converted to a very large size_t when passed to net_buf_simple_pull_mem(). In builds without assertions, this wraps the buffer length and advances the data pointer far out of bounds, so subsequent reads dereference invalid memory. A nearby BLE device can trigger this with a non-connectable advertisement carrying a UUID16 AD structure and a crafted length byte, with no pairing or prior association required, potentially leading to denial of service or arbitrary code execution.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

