🔍 CVE-2026-19570

8.8
CVSS Score
HIGH
2026-10-09
2026-10-09 18:17
✅ 완료

🇰🇷 한글 설명

LE Audio Broadcast Sink의 bap_broadcast_sink.c 파일에서 수신된 BASE 메타데이터를 복사할 때 경계 검사를 수행하지 않는 취약점이 발견되었습니다. 공격자가 조작된 BASE 데이터를 전송하면 정적 구조체인 mod_src_param의 범위를 넘어 메모리를 오염시킬 수 있으며, 이는 원격 코드 실행으로 이어질 수 있습니다.

💡 쉬운 설명

블루투스 오디오를 수신하는 과정에서 데이터의 크기를 제대로 확인하지 않아 발생하는 보안 결함입니다. 나쁜 의도를 가진 공격자가 특수한 신호를 보내면 기기의 메모리를 망가뜨리거나 기기를 원격으로 조종할 수 있습니다.

🇺🇸 원문 (English)

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.

📍 영향받는 시스템

CONFIG_BT_BAP_BROADCAST_SINK 및 CONFIG_BT_BAP_SCAN_DELEGATOR가 활성화된 블루투스 스택 기반 시스템

⚔️ 공격 벡터

페어링이나 연결 없이 무선 범위 내에서 조작된 BASE(Basic Audio Announcement) 데이터를 전송하여 공격

🛡️ 대응 방법

수신된 서브그룹 수가 수용 가능한 범위를 초과하는 경우 BASE를 거부하고, 크기가 맞지 않는 메타데이터는 복사하지 않도록 패치 적용

🔧 검증 코드

설정 파일에서 해당 옵션이 활성화되어 있는지 확인하여 취약한 기능의 사용 여부를 판단합니다.

Shell / Script
grep -r "CONFIG_BT_BAP_BROADCAST_SINK" /path/to/your/kernel_config_or_source

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Windows Bluetooth Service