CVE-2026-15894
WysokieCVSS 8.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 24 - wyżej niż 24% wszystkich znanych CVE
Streszczenie
Podatność w stosie Bluetooth Mesh Zephyr dotyczy obsługi pakietów Solicitation w funkcji sol_pdu_decrypt(). Odebrany pakiet PDU jest kopiowany do stałego bufora 17-bajtowego na stosie bez sprawdzania długości źródła, co w wersjach produkcyjnych (gdzie asercje są wyłączone) prowadzi do przepełnienia bufora. Atakujący może wysłać specjalnie spreparowaną reklamę Bluetooth, która spowoduje zapis danych poza bufor, bez potrzeby posiadania kluczy szyfrujących.
Ocena ryzyka
Ryzyko obejmuje zdalne wykonanie kodu lub co najmniej pewną zdalną odmowę usługi (DoS) na urządzeniach z włączoną obsługą On-Demand Private Proxy. Atak wymaga jedynie bycia w zasięgu radiowym i nie wymaga parowania ani uwierzytelniania, co czyni go łatwym do przeprowadzenia.
Rekomendacja
Należy natychmiast zastosować poprawkę, która ogranicza długość bufora do 17 oktetów przed deszyfrowaniem. Jeśli poprawka nie jest dostępna, należy wyłączyć CONFIG_BT_MESH_OD_PRIV_PROXY_SRV lub ograniczyć zasięg radiowy urządzeń.
Inne podatności w Zephyr Bluetooth Mesh
Zobacz wszystkie- CVE-2026-19937Średnie
Podatność w stosie Bluetooth Mesh w Zephyr powoduje trwałą utratę kontekstów wiadomości z puli, co prowadzi do odmowy usługi (DoS) po wyczerpaniu puli. Atakujący w sieci mesh może celowo wywołać wyciek kontekstów, a urządzenie przestaje odpowiadać na żądania do czasu restartu.
- CVE-2026-5589Średnie
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.
Oryginalny opis (angielski, źródło NVD)
The Bluetooth Mesh On-Demand Private Proxy solicitation handler in subsys/bluetooth/mesh/solicitation.c copies a received Solicitation PDU into a fixed 17-byte stack buffer without bounding the source length. In sol_pdu_decrypt(), out is allocated as NET_BUF_SIMPLE(17) and then filled with net_buf_simple_add_mem(out, in->data, in->len); net_buf_simple_add() guards its tailroom only with __ASSERT_NO_MSG, which is compiled out in production builds, so when in->len > 17 the underlying memcpy writes attacker-controlled bytes past the 17-byte stack buffer. The copy occurs before any decryption or authentication, so no key material is required to trigger it. The oversized length arises because the mesh scan callback in subsys/bluetooth/mesh/adv.c calls net_buf_simple_restore() before dispatching to bt_mesh_sol_recv(), leaving buf->len covering the entire remaining advertising payload rather than just the Solicitation Service Data. After the parser locates the Service Data AD and consumes the Identification Type byte, the remaining buf->len is the 17-octet Network PDU plus any trailing advertising bytes, and prior to this fix there was no maximum-length check (only a minimum). An attacker can therefore append extra AD structures or padding after the Solicitation Service Data to make buf->len exceed 17. bt_mesh_scan_cb() is registered directly as the BLE scan callback, so buf is raw, unauthenticated advertising data received over the air. Any device in radio range can send a non-connectable advertisement carrying a crafted mesh Proxy Solicitation to a node that has CONFIG_BT_MESH_OD_PRIV_PROXY_SRV enabled and is currently eligible to be solicited (GATT proxy disabled, On-Demand Private Proxy enabled), with no pairing, bonding, or provisioning. The result is an attacker-controlled stack overwrite — plausibly leading to remote code execution and at minimum a reliable remote denial of service. The fix trims buf->len to the spec-fixed 17 octets (dropping the PDU if fewer remain) before decryption.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

