The LE Audio Broadcast Sink in subsys/bluetooth/audio/bap_broadcast_sink.c copies subgroup metadata from a received Basic Audio Announcement (BASE) into the static Broadcast Audio Scan Service parameter structure mod_src_param without any bounds check. In base_subgroup_meta_cb() the destination element was selected as mod_src_param.subgroups[mod_src_param.num_subgroups] with no test against ARRAY_SIZE(mod_src_param.subgroups) (sized by CONFIG_BT_BAP_BASS_MAX_SUBGROUPS, default 1), and the metadata was copied with memcpy() using the raw on-air length returned by bt_bap_base_get_subgroup_codec_meta() into a metadata array sized by CONFIG_BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE (default 4). The BASE validator bt_bap_base_get_base_from_ad() only checks structural consistency and permits up to ~24 subgroups and metadata LTVs of ~240 octets.
The defect is reached from the periodic advertising receive callback: pa_recv() → bt_data_parse() → pa_decode_base() → update_recv_state_base() → bt_bap_base_foreach_subgroup() → base_subgroup_meta_cb(). Every broadcast sink registers a scan-delegator receive state at creation (bt_bap_broadcast_sink_create() calls broadcast_sink_add_src()), and CONFIG_BT_BAP_BROADCAST_SINK depends on CONFIG_BT_BAP_SCAN_DELEGATOR, so the path is active in every broadcast-sink build once the device is periodic-advertising-synced. An attacker in radio range who operates a broadcast source the device syncs to — or who impersonates the advertiser address and SID of one already in use, periodic advertising data being unauthenticated — can change the BASE at will; each new BASE is re-parsed.
A crafted BASE therefore writes attacker-chosen bytes past the end of a fixed static object in .bss: up to roughly 236 bytes for an oversized metadata LTV, plus whole struct bt_bap_bass_subgroup records for each subgroup beyond CONFIG_BT_BAP_BASS_MAX_SUBGROUPS. This is memory corruption of adjacent Bluetooth-audio state reachable with no pairing, bonding or GATT connection, with a potential for remote code execution in the Bluetooth RX thread; in addition, the unvalidated metadata_len is forwarded to bt_bap_scan_delegator_mod_src(), which neither clamps it nor rejects it, leading to a further copy into the receive state and to out-of-bounds memory being disclosed in the BASS receive-state notification sent to a connected Broadcast Assistant.
The fix rejects a BASE carrying more subgroups than the receive state can hold (discarding the update entirely) and omits metadata that does not fit rather than copying it, and additionally honours the previously-ignored error return of the subgroup decode pass.
{
"cna_assigner": "zephyr",
"cwe_ids": [
"CWE-120",
"CWE-787"
],
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/19xxx/CVE-2026-19570.json"
}"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-19570.json"
[
{
"deprecated": false,
"digest": {
"line_hashes": [
"89639250881921461428321733328325395888",
"294756770548867545286660971783345169428",
"147919520720776713959891958060977182936",
"330437784143584374398306990005076653296",
"263866269550027057997884405701701323927",
"100368840651485477544624688640897078925",
"21317355058463673021804550469493341671",
"171306193858979053124820849032683676944",
"137480847642186527787577572414524410555",
"286671510545799820835079133343842513345",
"219449782079088604115569323615446021159",
"300756553361722182553163320588104765441",
"324872131229588656947315974873153677179",
"326938214319867795020884080856408393148",
"236210081762565214856143168632629490488",
"70474732998465280343911549596222349156",
"16702914253146064628034916642210124505",
"334955931473348912214567269901933348520",
"186764318817582402233506766846834521356",
"63085645242609247277882672156219973317",
"320142875104612695442819300828627545302",
"217793329716293586420685933015832690571",
"146344808921182675730013177248591260834",
"248185320415441973979968873002301706409",
"46989352758245658183091382236184540568",
"257468955499649971584173209169582481804",
"127145588533842498850749236385316758332",
"25862518420509608550001969689439013657",
"203076724754729896877732942242500579141",
"47305627175546948212043768138541075764",
"232411976727801904875176552218328318974",
"190838669744768008172034326141061673154",
"252250421692066261362275429512465793781",
"91660480997662025190469972315819837787",
"67202442240704222351163961096604165192"
],
"threshold": 0.9
},
"id": "CVE-2026-19570-33be8b0c",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/5738f61f4128bb38508bab57342b1f7bf218d127",
"target": {
"file": "subsys/bluetooth/audio/bap_broadcast_sink.c"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "64071744143067070331746692490497919891",
"length": 995
},
"id": "CVE-2026-19570-46b578a1",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/5738f61f4128bb38508bab57342b1f7bf218d127",
"target": {
"file": "subsys/bluetooth/audio/bap_broadcast_sink.c",
"function": "update_recv_state_base"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "284122061243721422781664067113559513744",
"length": 1246
},
"id": "CVE-2026-19570-a769d02f",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/5738f61f4128bb38508bab57342b1f7bf218d127",
"target": {
"file": "subsys/bluetooth/audio/bap_broadcast_sink.c",
"function": "pa_decode_base"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "107322468742867694739652278569837039801",
"length": 411
},
"id": "CVE-2026-19570-be34dd00",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/5738f61f4128bb38508bab57342b1f7bf218d127",
"target": {
"file": "subsys/bluetooth/audio/bap_broadcast_sink.c",
"function": "base_subgroup_meta_cb"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "322917616491296625524941897903834597006",
"length": 1037
},
"id": "CVE-2026-19570-d88db7ef",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/5738f61f4128bb38508bab57342b1f7bf218d127",
"target": {
"file": "subsys/bluetooth/audio/bap_broadcast_sink.c",
"function": "base_decode_subgroup_cb"
}
}
]
"2026-10-11T07:04:32Z"