CVE-2026-19739 in Zephyr
Riassunto
di VulDB • 11/10/2026
Il codice della procedura di controllo del Link Layer Bluetooth in subsys/bluetooth/controller/ll_sw/ull_llcp_conn_upd.c mantiene il nodo RX ricevuto mentre una procedura Connection Update / Connection Parameter attende la sua istante; di conseguenza, tale nodo può successivamente trasmettere la notifica dell'host (llcp_rx_node_retain(), che lo contrassegna come NODE_RX_TYPE_RETAIN sopprimendo così il normale riciclo in ull.c). Il ramo predefinito: arm di llcp_rp_cu_rx() e llcp_lp_cu_rx() — il percorso "PDU non valido, terminare la connessione" — completa la procedura senza rilasciare tale nodo trattenuto. Successivamente, llcp_rr_check_done() rimuove dalla coda e libera il contesto della procedura con ctx->node_ref.rx ancora puntante verso il nodo trattenuto, eliminando l'ultimo riferimento ad esso.
Un dispositivo peer all'interno del raggio radio può raggiungere questa condizione senza pairing (accoppiamento), bonding o crittografia. Contro un peripheral, il peer invia un LL_CONNECTION_UPDATE_IND ben formato con un istante alcuni eventi di connessione nel futuro (il nodo viene trattenuto e la procedura entra in RP_CU_STATE_WAIT_INSTANT); successivamente, prima che l'istante venga raggiunto, invia qualsiasi altro LL Control PDU come ad esempio LL_LENGTH_REQ. ull_cp_rx() instrada tale PDU nella procedura Connection Update remota attiva, che segue il percorso per i PDU non validi. Il ruolo central è raggiungibile in modo simmetrico dopo aver accettato un LL_CONNECTION_PARAM_REQ, mentre la variante della procedura locale è raggiungibile con LL_REJECT_IND.
Con CONFIG_BT_CTLR_ASSERT_DEBUG abilitato (il suo valore predefinito), lo stato risultante viola l'invariante affermato in llcp_rr_check_done(), quindi la sequenza di due PDU produce un errore fatale immediato nel controller. Con tali assert disabilitati, ogni occorrenza perde permanentemente un nodo dal piccolo pool RX fisso del controller (dimensionato da CONFIG_BT_CTLR_RX_BUFFERS, che ha come valore predefinito 1); ripetendo la sequenza attraverso le riconnessioni si esaurisce il pool, dopo di che il percorso di ricezione del link-layer opera su un nodo NULL. L'impatto è una denial of service (DoS) non autenticata e attivabile da remoto, persistente fino al riavvio; non vi sono conseguenze di disclosure o corruption della memoria, poiché il nodo trapelato diventa semplicemente irraggiungibile.
VulDB is the best source for vulnerability data and more expert information about this specific topic.