CVE-2026-82388
ŚrednieCVSS 5.3Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 11 - wyżej niż 11% wszystkich znanych CVE
Streszczenie
Podatność w stosie Bluetooth Zephyr dotyczy funkcji bt_hfp_hf_connect(), która przy niepowodzeniu bt_rfcomm_dlc_connect() zeruje cały obiekt HFP Hands-Free, mimo że powiązane zapytanie SDP jest nadal aktywne. Prowadzi to do użycia zwolnionego obiektu, w tym wywołań przez wskaźnik NULL i zapętlenia listy żądań SDP, co skutkuje awarią lub zawieszeniem wątku hosta Bluetooth. Podatność można wywołać zdalnie, np. przez urządzenie reklamujące kanał RFCOMM spoza zakresu 1-30 lub kontrolujące timing połączenia.
Ocena ryzyka
Zdalny atakujący może doprowadzić do odmowy usługi (DoS) poprzez zawieszenie lub awarię stosu Bluetooth w urządzeniu, co może zakłócić komunikację i wymagać restartu. Podatne są tylko kompilacje z włączonymi opcjami CONFIG_BT_CLASSIC i CONFIG_BT_HFP_HF.
Rekomendacja
Zaktualizuj Zephyr do wersji zawierającej poprawkę, która zamiast zerować obiekt oznacza go flagą BT_HFP_HF_FLAG_RELEASING i zwalnia po zakończeniu discovery. Jeśli aktualizacja nie jest możliwa, rozważ wyłączenie CONFIG_BT_HFP_HF lub ograniczenie zaufania do zdalnych urządzeń Bluetooth.
Inne podatności w Zephyr Bluetooth Host
Zobacz wszystkie- CVE-2026-81039Średnie
Podatność w stosie Bluetooth hosta Zephyr dotyczy błędnego przypisania rezerwacji obiektu bt_conn do zestawu reklamowego przy połączeniach przychodzących. Gdy aplikacja uruchamia wiele rozszerzonych zestawów reklamowych (CONFIG_BT_EXT_ADV_MAX_ADV_SET > 1), funkcja find_pending_connect() może zwrócić rezerwację należącą do innego, wciąż aktywnego zestawu, co prowadzi do trwałego wycieku slotu połączenia. Atakujący w zasięgu radiowym może to wykorzystać bez uwierzytelnienia, doprowadzając do wyczerpania puli połączeń i odmowy usługi.
- CVE-2026-19938Średnie
Podatność w stosie Bluetooth Zephyr powoduje podwójne zwolnienie bufora net_buf w ścieżce transmisji ATT podczas nieudanego podpisywania. Ponadto, w przypadku niepowodzenia bt_l2cap_send_pdu(), bufor może zostać ponownie użyty z zachowanym podpisem, co prowadzi do zapisu poza zakresem. Skutkuje to uszkodzeniem pamięci, awariami lub potencjalnym wykonaniem kodu.
- CVE-2026-12236Średnie
Podatność w funkcji parse_read_std_char_desc() w podsystemie Bluetooth hosta (subsys/bluetooth/host/gatt.c) pozwala zdalnemu, nieuwierzytelnionemu urządzeniu na zawieszenie wątku obsługi Bluetooth przez wysłanie odpowiedzi ATT z zerową długością wpisu (rsp->len = 0). Pętla parsowania nie sprawdza minimalnej wartości rsp->len, co prowadzi do nieskończonej pętli (CWE-835) i braku możliwości zakończenia odkrywania deskryptorów.
- CVE-2026-5068Wysokie
W stosie Bluetooth hosta, podczas składania SDU L2CAP LE CoC, zdalny, nieuwierzytelniony peer BLE może wywołać zapis poza zakresem o długości 2 bajtów. Dzieje się tak, gdy aplikacja włącza segmentację, a wybrany pul RX ma user_data_size mniejszy niż 2 bajty, co powoduje zapis licznika segmentacji poza dozwolony obszar w l2cap_chan_le_recv_seg.
Oryginalny opis (angielski, źródło NVD)
bt_hfp_hf_connect() in subsys/bluetooth/host/classic/hfp_hf.c allocates the per-connection HFP Hands-Free object with hfp_hf_create(), which starts an SDP discovery by passing the object's embedded hf->sdp_param to bt_sdp_discover(). That call links the caller-owned parameter block into the SDP client's request list (session->reqs in subsys/bluetooth/host/classic/sdp.c). If the subsequent bt_rfcomm_dlc_connect() then failed, the affected code wiped the entire object with (void)memset(new_hf, 0, sizeof(*new_hf)) while that discovery was still outstanding, zeroing the sys_snode_t _node that is still linked in the SDP client's list along with the request's func, uuid and pool pointers, and zeroing the hf->slc_work work item that may already be queued on the system workqueue. The discovery could not be retracted instead: bt_sdp_discover_cancel() is declared in include/zephyr/bluetooth/classic/sdp.h but has no implementation. The failing branch is reachable with peer-supplied input. The documented use of bt_hfp_hf_connect() is to pass the RFCOMM channel read out of the remote Audio Gateway's SDP record; neither bt_sdp_get_proto_param() nor bt_hfp_hf_connect() range-checks that value, so a remote device advertising an HFP AG record with an RFCOMM channel outside 1-30 makes bt_rfcomm_dlc_connect() return -EINVAL and drives the local device into the wipe. The same branch is reached without any application misuse when the remote peer controls connection timing, for example when the RFCOMM session is in BT_RFCOMM_STATE_DISCONNECTING or the ACL is dropped between object creation and the RFCOMM call. Once the object has been wiped, the Bluetooth host continues to use it: sdp_client_alloc_buf() dereferences session->param->pool, which is now NULL, and the SDP receive paths call session->param->func() through a null function pointer, neither of which is NULL-checked. Because the wipe also clears hf->acl, the pool slot is considered free and a retry or an incoming HFP connection re-appends the same still-linked list node, turning session->reqs into a self-referential list that the host's list walkers never leave. The result is a fault or an unrecoverable hang in the Bluetooth host thread; the stray indirect call is through an all-zero pointer whose target the attacker does not control, so the practical impact is denial of service. The fix keeps the object allocated and marks it with a new BT_HFP_HF_FLAG_RELEASING flag, letting bt_hfp_hf_discover_cb() release it once the discovery completes instead of destroying it under the SDP client. Only builds with CONFIG_BT_CLASSIC and CONFIG_BT_HFP_HF enabled are affected.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

