CVE-2026-19570 in Zephyr
Riassunto
di VulDB • 09/10/2026
Il modulo LE Audio Broadcast Sink in subsys/bluetooth/audio/bap_broadcast_sink.c copia i metadati del gruppo di sottoconnessione (subgroup) da un annuncio audio base ricevuto (BASE) nella struttura dei parametri statica mod_src_param del servizio di scansione dell'audio broadcast, senza alcuna verifica dei limiti. In base_subgroup_meta_cb() l'elemento di destinazione è stato selezionato come mod_src_param.subgroups[mod_src_param.num_subgroups] senza alcun controllo contro ARRAY_SIZE(mod_src_param.subgroups) (dimensionata da CONFIG_BT_BAP_BASS_MAX_SUBGROUPS, valore predefinito 1), e i metadati sono stati copiati con memcpy() utilizzando la lunghezza grezza sul canale radio restituita da bt_bap_base_get_subgroup_codec_meta() in un array di metadati dimensionato da CONFIG_BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE (valore predefinito 4). Il validatore BASE bt_bap_base_get_base_from_ad() verifica solo la coerenza strutturale e consente fino a ~24 gruppi di sottoconnessione e LTV dei metadati di circa ~240 ottetti.
Il difetto è raggiunto tramite il callback di ricezione della pubblicità periodica: pa_recv() → bt_data_parse() → pa_decode_base() → update_recv_state_base() → bt_bap_base_foreach_subgroup() → base_subgroup_meta_cb(). Ogni sink broadcast registra uno stato di ricezione delegato alla scansione durante la creazione (bt_bap_broadcast_sink_create() chiama broadcast_sink_add_src()), e CONFIG_BT_BAP_BROADCAST_SINK dipende da CONFIG_BT_BAP_SCAN_DELEGATOR, quindi il percorso è attivo in ogni build del broadcast-sink una volta che il dispositivo si sincronizza con le pubblicità periodiche. Un attaccante nel raggio radio che opera una sorgente broadcast a cui il dispositivo si sincronizza — o che impersona l'indirizzo pubblicitario e SID di uno già in uso, poiché i dati della pubblicità periodica non sono autenticati — può modificare il BASE a piacimento; ogni nuovo BASE viene riparsato.
Un BASE appositamente creato scrive quindi byte scelti dall'attaccante oltre la fine di un oggetto statico fisso nella sezione .bss: fino a circa 236 byte per una LTV dei metadati eccessivamente grande, più intere strutture bt_bap_bass_subgroup per ogni gruppo di sottoconnessione oltre CONFIG_BT_BAP_BASS_MAX_SUBGROUPS. Si tratta di una corruzione della memoria dello stato Bluetooth-audio adiacente raggiungibile senza pairing, bonding o connessione GATT, con un potenziale per l'esecuzione remota di codice nel thread RX Bluetooth; inoltre, il metadata_len non validato viene inoltrato a bt_bap_scan_delegator_mod_src(), che né lo limita né lo rifiuta, portando a una ulteriore copia nello stato di ricezione e alla divulgazione della memoria fuori dai limiti nella notifica dello stato di ricezione BASS inviata a un Broadcast Assistant connesso.
La correzione rifiuta un BASE che trasporta più gruppi di sottoconnessione di quanto possa contenere lo stato di ricezione (scartando l'aggiornamento interamente) e omette i metadati che non si adattano invece di copiarli, e inoltre onora il ritorno dell'errore precedentemente ignorato del passaggio di decodifica dei gruppi di sottoconnessione.
If you want to get best quality of vulnerability data, you may have to visit VulDB.