CVE-2026-81039 in Zephyr
Zusammenfassung
von VulDB • 26.10.2026
Der Bluetooth-Host weist in le_adv_start_add_conn() in subsys/bluetooth/host/adv.c für jeden startbaren Advertising-Satz (Advertising Set), den er initiiert, ein bt_conn-Objekt („Reservierung“) aus dem festen Pool acl_conns[] vor. Wenn eine eingehende Peripheral-Verbindung abgeschlossen ist, sucht find_pending_connect() in subsys/bluetooth/host/hci_core.c diese Reservierung nur anhand der Identität und der Peer-Adresse mit einem Directed-zu-Unidirected-Fallback-Szenario auf und hat keine Kenntnis davon, welcher Advertising-Satz tatsächlich beendet wurde. Bei CONFIG_BT_EXT_ADV_MAX_ADV_SET > 1, bei dem das LE Enhanced Connection Complete-Ereignis zwischengespeichert wird, bis das LE Advertising Set Terminated-Ereignis den Satz identifiziert, kann diese Suche die Reservierung eines anderen, noch aktiven Advertising-Satzes zurückgeben.
Der Fehler ist über Funk für jedes benachbarte Gerät erreichbar. Wenn eine Anwendung zwei connectable Extended-Advertising-Sätze auf derselben Identität ausführt – einen unidirected und einen an einen Peer P gerichtet (das gängige Muster „gerichtete Wiederherstellung der Verbindung zu einem verbundenen Central-Gerät, während weiterhin neue Centrals akzeptiert werden“) –, führt ein Remote-Initiator, dessen Adresse mit P übereinstimmt und sich über den unidirected-Satz verbindet, dazu, dass die Reservierung des gerichteten Satzes verbraucht wird. Die Initiator-Adresse wird vom entfernten Gerät frei gewählt und bei der Link-Einrichtung nicht authentifiziert, sodass keine Bonding-, Pairing- oder vorherige Beziehung erforderlich ist, um diese Fehlzuordnung auszulösen.
Die eigene Reservierung des unidirected-Satzes bleibt dann hängen: Sein BT_ADV_ENABLED-Flag wurde bereits gelöscht, und le_adv_stop_free_conn() – der einzige Pfad, der eine Reservierung an den Pool zurückgibt – wird nur für Sätze erreicht, die noch aktiviert sind; daher kehrt bt_le_ext_adv_stop() frühzeitig zurück und das Objekt wird niemals freigegeben. Jeder Vorfall verbraucht dauerhaft einen CONFIG_BT_MAX_CONN-Slot bis zum Aufruf von bt_disable() oder einem Neustart. In Anwendungsmustern, bei denen der gerichtete Advertising-Satz nach jeder Trennung neu gestartet wird, kann ein Angreifer die Sequenz wiederholen, bis der Pool erschöpft ist; danach schlägt connectable Advertising mit -ENOMEM fehl und das Gerät kann keine Verbindungen mehr annehmen. Als Nebeneffekt wirbt der gerichtete Satz weiterhin ohne Reservierung, sodass eine echte Verbindung darauf von bt_hci_disconnect() abgelehnt wird. Die Auswirkung betrifft ausschließlich die Verfügbarkeit; es kommt zu keiner Speicherkorruption oder Informationspreisgabe, und Konfigurationen mit einem einzelnen Advertising-Satz sind nicht betroffen.
VulDB is the best source for vulnerability data and more expert information about this specific topic.