← Back to CVE Explorer

CVE-2026-10680

Full vulnerability record from the local CVENow database.

Description

The Classic (BR/EDR) L2CAP signaling handlers l2cap_br_conf_req() and l2cap_br_conf_rsp() in subsys/bluetooth/host/classic/l2cap_br.c validated the minimum command size against buf->len (the bytes remaining in the whole received PDU) instead of len (the per-command data length from the L2CAP signaling header). Because multiple signaling commands can be packed into one PDU, buf->len may exceed a command's len. An attacker can send a CONF_REQ command with a header length smaller than the configuration-request structure (e.g. 0), followed by another command so that buf->len still satisfies the check. The check then passes incorrectly and opt_len = len - sizeof(*req) underflows the uint16_t to a near-0xFFFF value. The configuration-option loop, which lacks an opt_len-versus-buf->len guard, then walks far past the end of the pooled ACL receive buffer using net_buf pull primitives that perform no runtime bounds check, producing an out-of-bounds read of host memory and, when the out-of-bounds option bytes encode an MTU or flush-timeout option, an out-of-bounds write. The BR/EDR signaling channel is processed before pairing/encryption and an L2CAP channel to an L0 service such as SDP can be opened without pairing, so an unauthenticated peer within radio range that can establish an ACL connection can trigger the flaw, leading to memory corruption and denial of service (host/device crash). The defect is present in released versions including v4.4.0. The fix validates against len instead of buf->len in both handlers.

Severity
HIGH
CVSS score
7.6 (v3.1)
Vulnerability status
Analyzed
Source identifier
Published
2026-07-21 22:17:00.303000
Last modified
2026-10-24 19:10:00.127000
View original CVE JSON
{
  "id": "CVE-2026-10680",
  "sourceIdentifier": "[email protected]",
  "published": "2026-07-21T22:17:00.303",
  "lastModified": "2026-10-24T19:10:00.127",
  "vulnStatus": "Analyzed",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "The Classic (BR/EDR) L2CAP signaling handlers l2cap_br_conf_req() and l2cap_br_conf_rsp() in subsys/bluetooth/host/classic/l2cap_br.c validated the minimum command size against buf->len (the bytes remaining in the whole received PDU) instead of len (the per-command data length from the L2CAP signaling header). Because multiple signaling commands can be packed into one PDU, buf->len may exceed a command's len. An attacker can send a CONF_REQ command with a header length smaller than the configuration-request structure (e.g. 0), followed by another command so that buf->len still satisfies the check. The check then passes incorrectly and opt_len = len - sizeof(*req) underflows the uint16_t to a near-0xFFFF value. The configuration-option loop, which lacks an opt_len-versus-buf->len guard, then walks far past the end of the pooled ACL receive buffer using net_buf pull primitives that perform no runtime bounds check, producing an out-of-bounds read of host memory and, when the out-of-bounds option bytes encode an MTU or flush-timeout option, an out-of-bounds write. The BR/EDR signaling channel is processed before pairing/encryption and an L2CAP channel to an L0 service such as SDP can be opened without pairing, so an unauthenticated peer within radio range that can establish an ACL connection can trigger the flaw, leading to memory corruption and denial of service (host/device crash). The defect is present in released versions including v4.4.0. The fix validates against len instead of buf->len in both handlers."
    },
    {
      "lang": "es",
      "value": "Los manejadores de señalización L2CAP Classic (BR/EDR) l2cap_br_conf_req() y l2cap_br_conf_rsp() en subsys/bluetooth/host/classic/l2cap_br.c validaron el tamaño mínimo del comando contra buf  ->  len (los bytes restantes en la PDU recibida completa) en lugar de len (la longitud de datos por comando del encabezado de señalización L2CAP). Debido a que múltiples comandos de señalización pueden empaquetarse en una PDU, buf  ->  len puede exceder la longitud de un comando. Un atacante puede enviar un comando CONF_REQ con una longitud de encabezado menor que la estructura de solicitud de configuración (por ejemplo, 0), seguido de otro comando para que buf  ->  len aún satisfaga la verificación. La verificación entonces pasa incorrectamente y opt_len = len - sizeof(req) provoca un desbordamiento negativo del uint16_t a un valor cercano a 0xFFFF. El bucle de opciones de configuración, que carece de una protección opt_len-versus-buf  ->  len, entonces avanza mucho más allá del final del búfer de recepción ACL agrupado utilizando primitivas de extracción net_buf que no realizan ninguna verificación de límites en tiempo de ejecución, produciendo una lectura fuera de límites de la memoria del host y, cuando los bytes de opción fuera de límites codifican una opción MTU o de tiempo de espera de vaciado, una escritura fuera de límites. El canal de señalización BR/EDR se procesa antes del emparejamiento/cifrado y un canal L2CAP a un servicio L0 como SDP puede abrirse sin emparejamiento, por lo que un par no autenticado dentro del alcance de la radio que pueda establecer una conexión ACL puede activar la falla, lo que lleva a corrupción de memoria y denegación de servicio (bloqueo del host/dispositivo). El defecto está presente en versiones lanzadas, incluida la v4.4.0. La solución valida contra len en lugar de buf  ->  len en ambos manejadores."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "zephyrproject",
          "product": "zephyr",
          "defaultStatus": "unaffected",
          "collectionURL": "https://github.com/zephyrproject-rtos/zephyr",
          "packageName": "zephyr",
          "programFiles": [
            "subsys/bluetooth/host/classic/l2cap_br.c"
          ],
          "versions": [
            {
              "version": "4.2.0",
              "lessThan": "4.3.1",
              "versionType": "semver",
              "status": "affected"
            },
            {
              "version": "4.4.0",
              "lessThan": "4.4.2",
              "versionType": "semver",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H",
          "baseScore": 7.6,
          "baseSeverity": "HIGH",
          "attackVector": "ADJACENT_NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "LOW",
          "integrityImpact": "LOW",
          "availabilityImpact": "HIGH"
        },
        "exploitabilityScore": 2.8,
        "impactScore": 4.7
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-07-22T19:33:04.837486Z",
          "id": "CVE-2026-10680",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "total"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-125"
        }
      ]
    }
  ],
  "configurations": [
    {
      "nodes": [
        {
          "operator": "OR",
          "negate": false,
          "cpeMatch": [
            {
              "vulnerable": true,
              "criteria": "cpe:2.3:o:zephyrproject:zephyr:*:*:*:*:*:*:*:*",
              "versionStartIncluding": "4.2.0",
              "versionEndExcluding": "4.3.1",
              "matchCriteriaId": "7A9B9011-247E-42B6-9000-FC4564C07197"
            },
            {
              "vulnerable": true,
              "criteria": "cpe:2.3:o:zephyrproject:zephyr:*:*:*:*:*:*:*:*",
              "versionStartIncluding": "4.4.0",
              "versionEndIncluding": "4.4.1",
              "matchCriteriaId": "BF44F4FC-9EF2-4562-ACEB-2BE5AE165E9C"
            }
          ]
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/commit/1d451683377f4c8e56d7718565bea7b5c1155159",
      "source": "[email protected]",
      "tags": [
        "Patch"
      ]
    },
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-vrwx-p97q-8854",
      "source": "[email protected]",
      "tags": [
        "Patch",
        "Vendor Advisory"
      ]
    }
  ]
}