« Volver al listado

CVE-2026-19570

Estado: Pendiente de análisisAlta (8.8)—

La función Broadcast Sink de LE Audio en subsys/bluetooth/audio/bap_broadcast_sink.c copia metadatos de subgrupos de un anuncio de audio básico (BASE) recibido en la estructura de parámetros estática del servicio de escaneo de audio de transmisión mod_src_param sin ninguna comprobación de límites.

Leer descripción completaMostrar menos

En base_subgroup_meta_cb() el elemento de destino se seleccionaba como mod_src_param.subgroups[mod_src_param.num_subgroups] sin prueba contra ARRAY_SIZE(mod_src_param.subgroups) (dimensionado por CONFIG_BT_BAP_BASS_MAX_SUBGROUPS, por defecto 1), y los metadatos se copiaban con memcpy() utilizando la longitud en línea devuelta por bt_bap_base_get_subgroup_codec_meta() en un array de metadatos dimensionado por CONFIG_BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE (por defecto 4). El validador BASE bt_bap_base_get_base_from_ad() solo comprueba la coherencia estructural y permite hasta ~24 subgrupos y LTV de metadatos de ~240 octetos.

El defecto se alcanza desde la devolución de llamada de recepción de publicidad periódica: pa_recv() → bt_data_parse() → pa_decode_base() → update_recv_state_base() → bt_bap_base_foreach_subgroup() → base_subgroup_meta_cb(). Cada broadcast sink registra un estado de recepción delegado de escaneo en la creación (bt_bap_broadcast_sink_create() llama a broadcast_sink_add_src()), y CONFIG_BT_BAP_BROADCAST_SINK depende de CONFIG_BT_BAP_SCAN_DELEGATOR, por lo que la ruta está activa en cada compilación de broadcast-sink una vez que el dispositivo está sincronizado en publicidad periódica. Un atacante en rango de radio que opere una fuente de transmisión a la que se sincroniza el dispositivo —o que suplante la dirección del anunciante y SID de una ya en uso, siendo los datos de publicidad periódica no autenticados— puede cambiar la BASE a voluntad; cada nueva BASE se vuelve a analizar.

Un BASE elaborado escribe, por lo tanto, bytes elegidos por el atacante más allá del final de un objeto estático fijo en .bss: hasta aproximadamente 236 bytes para un LTV de metadatos sobredimensionado, más registros struct bt_bap_bass_subgroup completos para cada subgrupo más allá de CONFIG_BT_BAP_BASS_MAX_SUBGROUPS. Se trata de una corrupción de memoria del estado adyacente de audio Bluetooth accesible sin emparejamiento, vinculación o conexión GATT, con potencial para ejecución remota de código en el hilo de RX Bluetooth; además, la metadata_len no validada se reenvía a bt_bap_scan_delegator_mod_src(), que ni la limita ni la rechaza, dando lugar a una copia posterior en el estado de recepción y a una divulgación de memoria fuera de límites en la notificación del estado de recepción de BASS enviada a un asistente de transmisión conectado.

La corrección rechaza un BASE que lleva más subgrupos de los que el estado de recepción puede contener (descartando la actualización por completo) y omite los metadatos que no caben en lugar de copiarlos, y además respeta el retorno de error previamente ignorado de la pasada de decodificación de subgrupos.

Traducción automática del texto original de NVD (en inglés).

CVSS

Probabilidad de explotación (EPSS)

EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).

🎯 Técnicas ATT&CK

Cómo se explota esta vulnerabilidad y qué consigue el atacante, en el lenguaje de MITRE ATT&CK.

Vulnerabilidad de buffer overflow en subsistema Bluetooth LE remoto (AV:A, sin autenticación). Atacante en rango de radio sincroniza con dispositivo y envía BASE malformado que sobrescribe memoria estática. Potencial RCE en hilo RX + corrupción de datos de estado de audio.

Inferido por nuestro agente de análisis a partir de la descripción oficial, el vector CVSS y la CWE, y comprobado por un supervisor. Puede contener errores.

🛡️ Mitigaciones ATT&CK que cubren estas técnicas

Tecnologías afectadas (1)

⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.

CWE

Referencias

JSON original (NVD)

Mostrar
{
  "id": "CVE-2026-19570",
  "cveTags": [],
  "metrics": {
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "id": "CVE-2026-19570",
          "role": "CISA Coordinator",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "total"
            }
          ],
          "version": "2.0.3",
          "timestamp": "2026-10-09T17:58:11.396130Z"
        }
      }
    ],
    "cvssMetricV31": [
      {
        "type": "Secondary",
        "source": "vulnerabilities@zephyrproject.org",
        "cvssData": {
          "scope": "UNCHANGED",
          "version": "3.1",
          "baseScore": 8.8,
          "attackVector": "ADJACENT_NETWORK",
          "baseSeverity": "HIGH",
          "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
          "integrityImpact": "HIGH",
          "userInteraction": "NONE",
          "attackComplexity": "LOW",
          "availabilityImpact": "HIGH",
          "privilegesRequired": "NONE",
          "confidentialityImpact": "HIGH"
        },
        "impactScore": 5.9,
        "exploitabilityScore": 2.8
      }
    ]
  },
  "affected": [
    {
      "source": "vulnerabilities@zephyrproject.org",
      "affectedData": [
        {
          "vendor": "zephyrproject",
          "product": "zephyr",
          "versions": [
            {
              "status": "affected",
              "version": "3.6.0",
              "versionType": "semver",
              "lessThanOrEqual": "4.4.2"
            }
          ],
          "packageName": "zephyr",
          "programFiles": [
            "subsys/bluetooth/audio/bap_broadcast_sink.c"
          ],
          "collectionURL": "https://github.com/zephyrproject-rtos/zephyr",
          "defaultStatus": "unaffected",
          "programRoutines": [
            {
              "name": "base_subgroup_meta_cb"
            },
            {
              "name": "update_recv_state_base_copy_meta"
            }
          ]
        }
      ]
    }
  ],
  "published": "2026-10-09T08:16:54.693",
  "references": [
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/commit/5738f61f4128bb38508bab57342b1f7bf218d127",
      "source": "vulnerabilities@zephyrproject.org"
    },
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-4qwc-2qfq-w2fj",
      "source": "vulnerabilities@zephyrproject.org"
    }
  ],
  "vulnStatus": "Awaiting Analysis",
  "weaknesses": [
    {
      "type": "Secondary",
      "source": "vulnerabilities@zephyrproject.org",
      "description": [
        {
          "lang": "en",
          "value": "CWE-120"
        },
        {
          "lang": "en",
          "value": "CWE-787"
        }
      ]
    }
  ],
  "descriptions": [
    {
      "lang": "en",
      "value": "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.\n\nThe 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.\n\nA 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.\n\nThe 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."
    }
  ],
  "lastModified": "2026-10-09T18:17:07.887",
  "sourceIdentifier": "vulnerabilities@zephyrproject.org"
}