CVE-2026-19570 in Zephyr
Zusammenfassung
von VulDB • 09.10.2026
Der LE Audio Broadcast Sink in subsys/bluetooth/audio/bap_broadcast_sink.c kopiert Subgroup-Metadaten aus einem empfangenen Basic Audio Announcement (BASE) ohne jegliche Grenzwertprüfung in die statische Struktur der Parameter des Broadcast Audio Scan Service, mod_src_param. In base_subgroup_meta_cb() wird das Ziel-Element als mod_src_param.subgroups[mod_src_param.num_subgroups] ausgewählt, wobei kein Test gegen ARRAY_SIZE(mod_src_param.subgroups) (definiert durch CONFIG_BT_BAP_BASS_MAX_SUBGROUPS, Standardwert 1) durchgeführt wird, und die Metadaten werden mit memcpy() unter Verwendung der rohen On-Air-Länge, die von bt_bap_base_get_subgroup_codec_meta() zurückgegeben wird, in einen Metadata-Array kopiert, dessen Größe durch CONFIG_BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE (Standardwert 4) festgelegt ist. Der BASE-Validator bt_bap_base_get_base_from_ad() überprüft lediglich die strukturelle Konsistenz und erlaubt bis zu ~24 Subgroups sowie Metadaten-LTVs von ~240 Oktetten.
Der Fehler wird über den Callback für das Empfangen periodischer Werbung erreicht: pa_recv() → bt_data_parse() → pa_decode_base() → update_recv_state_base() → bt_bap_base_foreach_subgroup() → base_subgroup_meta_cb(). Jeder Broadcast Sink registriert bei der Erstellung einen empfangsdelegierenden Scan-Status (bt_bap_broadcast_sink_create() ruft broadcast_sink_add_src() auf), und CONFIG_BT_BAP_BROADCAST_SINK hängt von CONFIG_BT_BAP_SCAN_DELEGATOR ab, sodass der Pfad in jeder Build-Konfiguration mit Broadcast-Sink-Aktivierung aktiv ist, sobald das Gerät eine periodische Werbe-Verbindung (periodic-advertising-synced) hergestellt hat. Ein Angreifer im Funkbereich, der eine Broadcast-Quelle betreibt, mit der sich das Gerät synchronisiert – oder der die Adresse und SID des Werbers einer bereits genutzten Quelle vortäuscht, wobei periodische Werbungsdaten nicht authentifiziert sind –, kann den BASE nach Belieben ändern; jeder neue BASE wird erneut analysiert.
Ein speziell angefertigter BASE schreibt daher vom Angreifer gewählte Bytes über das Ende eines festen statischen Objekts in .bss hinaus: bis zu etwa 236 Byte für eine übergroße Metadaten-LTV sowie ganze struct bt_bap_bass_subgroup-Datensätze für jede Subgruppe jenseits von CONFIG_BT_BAP_BASS_MAX_SUBGROUPS. Dies stellt eine Speicherkorruption des benachbarten Bluetooth-Audio-Status dar, die ohne Pairing, Bonding oder GATT-Verbindung erreichbar ist, mit dem Potenzial zur Remote Code Execution im Bluetooth RX-Thread; zusätzlich wird das ungültig geprüfte metadata_len an bt_bap_scan_delegator_mod_src() weitergeleitet, was es weder begrenzt noch ablehnt, was zu einer weiteren Kopie in den Empfangsstatus und zur Offenlegung von Speicher außerhalb der Grenzen (out-of-bounds memory) in der BASS-Empfangsstatus-Benachrichtigung führt, die an einen verbundenen Broadcast Assistant gesendet wird.
Die Korrektur lehnt einen BASE ab, der mehr Subgroups enthält, als der Empfangsstatus aufnehmen kann (wodurch das Update vollständig verworfen wird), und lässt Metadaten weg, die nicht hineinpassen, statt sie zu kopieren; zudem werden zuvor ignorierte Fehlerrückgaben des Subgroup-Decodierungsdurchlaufs berücksichtigt.
VulDB is the best source for vulnerability data and more expert information about this specific topic.