CVE-2026-19935

Estado: Pendiente de análisisAlta (7.5)—
Gravedad7.5Alta · CVSS 3.1
Probabilidad de explotación0.18 %mayor que el 7 % de las CVE
Explotación activaNono figura en el catálogo de CISA
Exploit públicoNo conocidosin código público localizado

El servidor Bluetooth LE pone en cola los datos de canales orientados a conexión (CoC) L2CAP recibidos para procesamiento diferido a través de una estructura k_work incrustada en el objeto de canal (le_chan->rx_work, manejador l2cap_rx_process()) siempre que el canal utilice un PSM dinámico (0x0080-0x00FF). El desmantelamiento de canales en l2cap_chan_destroy() en subsys/bluetooth/host/l2cap.c cancela el trabajo de tiempo de espera de retransmisión y vacía la FIFO de RX, pero nunca cancela rx_work.

Leer descripción completaMostrar menos

Debido a que ese elemento de trabajo se envió a la cola de trabajo del sistema mientras que el procesamiento de recepción HCI se ejecuta en la cola de trabajo de Bluetooth dedicada (CONFIG_BT_RECV_WORKQ_BT, la predeterminada), un elemento rx_work en cola puede outlive el canal al que apunta.

Un homólogo remoto no autenticado con un canal CoC establecido dispara esto enviando un K-frame de datos inmediatamente seguido de una solicitud de desconexión L2CAP. El K-frame envía rx_work a la cola de trabajo del sistema; debido a que ambos hilos de la cola de trabajo son cooperativos y la cola de trabajo de RX de Bluetooth se ejecuta con la prioridad más alta (K_PRIO_COOP(CONFIG_BT_RX_PRIO) frente a CONFIG_SYSTEM_WORKQUEUE_PRIORITY), el elemento pendiente no puede ejecutarse antes de que la siguiente solicitud de desconexión se procese en le_disconn_req() -> l2cap_chan_del() -> l2cap_chan_destroy(). Luego, la pila invoca la devolución de llamada released(), que la API documenta como que significa que la pila ha descartado todas las referencias y la aplicación puede liberar la memoria del canal.

Por lo tanto, la aplicación libera o reacepta en un objeto que la cola de trabajo del sistema aún mantiene en su lista pendiente. Si la memoria se libera y se reasigna, la cola de trabajo posteriormente desreferencia un nodo de lista y un puntero de función manejador leído de la memoria reutilizada; si el objeto se reutiliza para una conexión posterior, l2cap_chan_add() llama a k_work_init() en un elemento de trabajo aún encolado, corrompiendo la lista pendiente de la cola de trabajo de modo que se descartan elementos de trabajo no relacionados o la cola gira en una lista bloqueada. Una variante relacionada permite que l2cap_rx_process() se ejecute concurrentemente con el desmantelamiento, en una carrera entre net_buf unref de le_chan->_sdu y la limpieza de chan->conn.

La corrección enruta el trabajo de RX del canal a la cola de trabajo de Bluetooth —el mismo contexto en el que se ejecuta cada ruta de desmantelamiento— y añade una cancelación explícita de k_work_cancel() de le_chan->rx_work en l2cap_chan_destroy(), de modo que ninguna referencia al canal sobrevive a la devolución de llamada released(). Las configuraciones sin CONFIG_BT_L2CAP_DYNAMIC_CHANNEL, o que solo utilizan PSM asignados por SIG (EATT 0x0027, OTS 0x0025) que toman la ruta de recepción en línea, no se ven afectadas.

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

CVSS

Puntuación base
7.5
Versión
3.1
Vector
CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

Probabilidad de explotación (EPSS)

Probabilidad de explotación en los próximos 30 días
0.18 %
Percentil entre todas las CVEs puntuadas
7
Fecha de la puntuación
21/10/2026

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.

AV:A (red adyacente) sin autenticación previa → T1210. Corrupción de memoria de kernel tras usar canales L2CAP dinámicos permite ejecución de código (T1059) o escalada de privilegios (T1068) una vez explotada la race condition.

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

Mostrar las 2 referencias

JSON original (NVD)

Mostrar
{
  "id": "CVE-2026-19935",
  "cveTags": [],
  "metrics": {
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "id": "CVE-2026-19935",
          "role": "CISA Coordinator",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "total"
            }
          ],
          "version": "2.0.3",
          "timestamp": "2026-10-16T15:48:18.823080Z"
        }
      }
    ],
    "cvssMetricV31": [
      {
        "type": "Secondary",
        "source": "vulnerabilities@zephyrproject.org",
        "cvssData": {
          "scope": "UNCHANGED",
          "version": "3.1",
          "baseScore": 7.5,
          "attackVector": "ADJACENT_NETWORK",
          "baseSeverity": "HIGH",
          "vectorString": "CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H",
          "integrityImpact": "HIGH",
          "userInteraction": "NONE",
          "attackComplexity": "HIGH",
          "availabilityImpact": "HIGH",
          "privilegesRequired": "NONE",
          "confidentialityImpact": "HIGH"
        },
        "impactScore": 5.9,
        "exploitabilityScore": 1.6
      }
    ]
  },
  "affected": [
    {
      "source": "vulnerabilities@zephyrproject.org",
      "affectedData": [
        {
          "vendor": "zephyrproject",
          "product": "zephyr",
          "versions": [
            {
              "status": "affected",
              "version": "2.0.0",
              "versionType": "semver",
              "lessThanOrEqual": "4.4.2"
            }
          ],
          "packageName": "zephyr",
          "programFiles": [
            "subsys/bluetooth/host/l2cap.c"
          ],
          "collectionURL": "https://github.com/zephyrproject-rtos/zephyr",
          "defaultStatus": "unaffected",
          "programRoutines": [
            {
              "name": "l2cap_chan_destroy"
            },
            {
              "name": "l2cap_chan_recv_queue"
            },
            {
              "name": "l2cap_rx_process"
            }
          ]
        }
      ]
    }
  ],
  "published": "2026-10-11T18:16:59.410",
  "references": [
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/commit/22896cb8d6f23feffe4b637119fb3e974ac3bed8",
      "source": "vulnerabilities@zephyrproject.org"
    },
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-6gp4-cwf7-2vp8",
      "source": "vulnerabilities@zephyrproject.org"
    }
  ],
  "vulnStatus": "Awaiting Analysis",
  "weaknesses": [
    {
      "type": "Secondary",
      "source": "vulnerabilities@zephyrproject.org",
      "description": [
        {
          "lang": "en",
          "value": "CWE-416"
        }
      ]
    }
  ],
  "descriptions": [
    {
      "lang": "en",
      "value": "The Bluetooth LE host queues received L2CAP connection-oriented channel (CoC) data for deferred processing through a struct k_work embedded in the channel object (le_chan->rx_work, handler l2cap_rx_process()) whenever the channel uses a dynamic PSM (0x0080-0x00FF). Channel teardown in l2cap_chan_destroy() in subsys/bluetooth/host/l2cap.c cancels the retransmission-timeout work and drains the RX FIFO, but never cancels rx_work. Because that work item was submitted to the system workqueue while HCI receive processing runs on the dedicated Bluetooth RX workqueue (CONFIG_BT_RECV_WORKQ_BT, the default), a queued rx_work item can outlive the channel it points into.\n\nA remote, unauthenticated peer with an established CoC channel triggers this by sending a data K-frame immediately followed by an L2CAP Disconnect Request. The K-frame submits rx_work to the system workqueue; because both workqueue threads are cooperative and the Bluetooth RX workqueue runs at the higher priority (K_PRIO_COOP(CONFIG_BT_RX_PRIO) versus CONFIG_SYSTEM_WORKQUEUE_PRIORITY), the pending item cannot run before the following Disconnect Request is processed in le_disconn_req() -> l2cap_chan_del() -> l2cap_chan_destroy(). The stack then invokes the released() callback, which the API documents as meaning the stack has dropped all references and the application may free the channel memory.\n\nThe application therefore frees or re-accepts into an object that the system workqueue still holds in its pending list. If the memory is freed and reallocated, the workqueue later dereferences a list node and a handler function pointer read from reused memory; if the object is re-used for a later connection, l2cap_chan_add() calls k_work_init() on a still-enqueued work item, corrupting the workqueue's pending list so that unrelated work items are dropped or the queue spins on a looped list. A related variant lets l2cap_rx_process() run concurrently with teardown, racing the net_buf unref of le_chan->_sdu and the clearing of chan->conn.\n\nThe fix routes the channel RX work to the Bluetooth workqueue - the same context in which every teardown path runs - and adds an explicit k_work_cancel() of le_chan->rx_work in l2cap_chan_destroy(), so no reference to the channel survives the released() callback. Configurations without CONFIG_BT_L2CAP_DYNAMIC_CHANNEL, or that only use SIG-assigned PSMs (EATT 0x0027, OTS 0x0025) which take the inline receive path, are not affected."
    }
  ],
  "lastModified": "2026-10-16T16:17:05.703",
  "sourceIdentifier": "vulnerabilities@zephyrproject.org"
}