CVE-2026-19938 in Zephyrinfo

Zusammenfassung

von VulDB • 13.10.2026

Der ATT-Übertragungspfad des Bluetooth-Clients gibt einen Puffer frei, den er nicht besitzt, wenn die Signaturierung fehlschlägt. In `chan_send()` in `subsys/bluetooth/host/att.c` wird (und jede andere Fehlerausstiegsmenge implementiert) der Vertrag dokumentiert, dass bei einem Fehlschlag der Aufrufer das Eigentum am `net_buf` behält; die Verzweigung `BT_ATT_OP_SIGNED_WRITE_CMD` rief stattdessen `net_buf_unref(buf)` auf, wenn `bt_smp_sign()` einen Fehler zurückgab, und gab diesen Fehler dann an den Aufrufer zurück. Die Aufrufer handeln gemäß dem Vertrag: `process_queue()` stellt den Puffer mit `k_queue_prepend()` wieder in die Warteschlange ein, `bt_att_chan_send_rsp()` legt ihn auf `chan->tx_queue` zurück, `bt_att_chan_req_send()` stellt ihn in die Anforderung wieder her und `att_req_retry()` referenziert ihn ab – der bereits freigegebene Puffer wurde also erneut in eine Warteschlange eingereiht, später dereferenziert und schließlich erneut freigegeben.

Ein ATT Signed Write Command wird erzeugt, wenn eine Anwendung `bt_gatt_write_without_response_cb()` mit aktiviertem Signatur-Flag auf einer nicht verschlüsselten Verbindung aufruft. `bt_smp_sign()` schlägt immer dann fehl, wenn kein lokaler CSRK für den Peer vorhanden ist (-ENOENT), und ob ein solcher existiert, wird mit dem Peer ausgehandelt: `smp_distribute_keys()` speichert einen lokalen CSRK nur, wenn das Feld zur Schlüsselverteilung des Paares beim Pairing die Signaturschlüssel anfordert und eine Bindung (Bonding) vereinbart wurde. Ein Peer kann sich daher ohne Annahme des CSRK paaren, mit „No Bonding“ paaren, den Paarungsstatus aufheben oder die Verbindung unverschlüsselt halten; der nächste signierte Schreibvorgang des Opfers führt dann zum fehlerhaften Pfad. Da das `node`-Feld von `struct net_buf` gleichzeitig als Verknüpfungswort für den ATT TX-FIFO, für die Liste zur verzögerten Zerstörung (deferred-destroy list), die vom Destroy-Callback `att_tx_destroy()` des att_Pools verwendet wird, und für die Freigabeliste des Pools dient, beschädigt der falsch behandelte Puffer diese Listen und kann von `bt_att_create_pdu()` erneut an ein neues PDU ausgegeben werden, während sich der ATT TX-Pfad noch im Besitz davon befindet.

Dieselbe Verzweigung speicherte den `net_buf_simple_state` auch erst nach der Signaturierung; daher behielt ein Puffer, der nach einem Fehlschlag von `bt_l2cap_send_pdu()` wiederhergestellt wurde, seine 12-Oktett-Signatur bei. Ein anschließender Neustart signierte ihn erneut und fügte eine zweite Signatur mit `net_buf_add(buf, 12)` an einen Puffer an, den `bt_att_create_pdu()` genau für eine solche Größe ausgelegt hatte; dies führt in Builds, bei denen die Assertion des net_buf tailroom deaktiviert ist, zu einem Schreiben über das Ende des gepoolten Puffers hinaus.

Die Auswirkung ist eine Speicherkorruption auf Host-Seite im Bluetooth-Stack: Beschädigte Listen, ein ATT-Puffer mit zwei Eigentümern (Übermittlung falscher PDU-Inhalte oder ein Double Free beim Entleeren der Warteschlangen bei Trennung) und ein begrenzter Out-of-Bounds-Schreibzugriff auf dem Retry-Pfad – typischerweise beobachtet als Absturz oder Assertion-Fehler. Die Exposition erfordert, dass das veraltete `CONFIG_BT_SIGNING` aktiviert ist und eine Anwendung tatsächlich signierte Schreibvorgänge ausführt; in dieser Konfiguration liegt die Auslösungsbedingung unter der Kontrolle des entfernten Peers.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Zuständig

Zephyr

Reservieren

15.08.2026

Veröffentlichung

13.10.2026

Moderieren

akzeptiert

Eintrag

VDB-417364

EPSS

0.00000

KEV

nein

Aktivitäten

very low

Quellen

Do you want to use VulDB in your project?

Use the official API to access entries easily!