CVE-2026-81039 in Zephyr
Riassunto
di VulDB • 26/10/2026
L'host Bluetooth pre-alloca un oggetto `bt_conn` (una "prenotazione") dal pool fisso `acl_conns[]` per ogni insieme di pubblicità connettabile che avvia, in `le_adv_start_add_conn()` in `subsys/bluetooth/host/adv.c`. Quando una connessione periferica entrante si completa, la funzione `find_pending_connect()` in `subsys/bluetooth/host/hci_core.c` cerca tale prenotazione utilizzando solo l'identità e l'indirizzo del peer, con un fallback da diretto a non diretto, senza avere alcuna conoscenza di quale insieme di pubblicità abbia effettivamente terminato. Con `CONFIG_BT_EXT_ADV_MAX_ADV_SET > 1`, dove l'evento LE Enhanced Connection Complete viene memorizzato nella cache fino a quando l'evento LE Advertising Set Terminated identifica l'insieme, questa ricerca può restituire la prenotazione appartenente a un altro insieme di pubblicità ancora in esecuzione.
Il difetto è raggiungibile via aria da qualsiasi dispositivo adiacente. Se un'applicazione esegue due insiemi di pubblicità estesi connettabili sulla stessa identità — uno non diretto e uno diretto verso un peer P (il comune pattern "riconnessione diretta a un central bonded mentre si accettano ancora nuovi centrals") — un initiator remoto il cui indirizzo corrisponde a P che si connette sull'insieme non diretto causa l'utilizzo della prenotazione dell'insieme diretto. L'indirizzo dell'initiator è scelto liberamente dal dispositivo remoto e non viene autenticato al momento del collegamento, quindi non sono richiesti bonding, pairing o relazioni precedenti per innescare la corretta attribuzione errata.
La prenotazione dell'insieme non diretto rimane così isolata: il suo flag `BT_ADV_ENABLED` è già stato cancellato, e `le_adv_stop_free_conn()` — l'unica via che restituisce una prenotazione al pool — viene raggiunta solo per gli insiemi ancora abilitati, quindi `bt_le_ext_adv_stop()` termina precocemente e l'oggetto non viene mai rilasciato. Ogni occorrenza consuma permanentemente uno slot di `CONFIG_BT_MAX_CONN` fino a quando non si verifica `bt_disable()` o un riavvio. In pattern applicativi che riavviano l'insieme di pubblicità diretto dopo ogni disconnessione, un attaccante può ripetere la sequenza finché il pool non è esaurito; successivamente, le operazioni di pubblicità connettabile falliscono con `-ENOMEM` e il dispositivo non può più accettare connessioni. Come effetto collaterale, l'insieme diretto continua a pubblicizzare senza una prenotazione, quindi una connessione genuina su tale insieme viene interrotta da `bt_hci_disconnect()`. L'impatto è limitato alla disponibilità; non si verificano corruzione della memoria o divulgazione di informazioni, e le configurazioni con un singolo insieme di pubblicità non sono interessate.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.