« Volver al listado

CVE-2026-19571

Estado: Pendiente de análisisMedia (6.7)—

El subsistema de interfaz de host SHI del ITE IT8xxx2 (subsys/mgmt/ec_host_cmd/backends/ec_host_cmd_backend_shi_ite.c) copiaba el encabezado de solicitud de comando de host de 8 bytes de la FIFO de recepción SPI directamente al búfer de recepción compartido data->in_msg y solo después comprobaba la versión del protocolo y la longitud del paquete derivada. El manejador de interrupciones también aceptaba una aserción de selección de chip y una interrupción de longitud válida de recepción (RVLI) en cualquier estado del controlador que no fuera SHI_STATE_DISABLED, por lo que un nuevo encabezado podría analizarse mientras el hilo de comando de host aún estaba procesando la solicitud anterior fuera del mismo búfer.

Leer descripción completaMostrar menos

El procesador de host es el controlador SPI e impulsa tanto la selección de chip como el reloj. Después de enviar una solicitud bien formada, puede desactivar inmediatamente la selección de chip, lo que devuelve el controlador al estado listo y vuelve a habilitar la FIFO, e iniciar una segunda transacción que lleva un encabezado con data_len = 0xFFFF. Esos ocho bytes se escriben en in_msg antes de que se rechace la longitud excesiva, por lo que se cae en un búfer cuyos contenidos verify_rx() en subsys/mgmt/ec_host_cmd/ec_host_cmd_handler.c ya ha validado. Si esto cae en la ventana antes de que el hilo de comando de host ejecute args.input_buf_size = rx_header->data_len, el marco proporciona al manejador de comando registrado una longitud de búfer de entrada de 65535 bytes sobre un búfer de 256 bytes.

El resultado es una lectura fuera de límites de hasta aproximadamente 64 KiB más allá del búfer de solicitud: los manejadores de comando que copian o repiten input_buf_size bytes divulgan memoria del controlador incrustado adyacente al host o desbordan el búfer de respuesta, y una lectura más allá del final de la SRAM causa un fallo del controlador. La misma condición de carrera también permite que cmd_id y cmd_ver se intercambien después de la verificación de la suma de comprobación y después de la búsqueda del manejador. La explotación requiere la capacidad de impulsar el bus SHI entre procesadores (un SO host comprometido o acceso físico a las líneas SPI) y ganar una condición de carrera, que el controlador SPI puede reintentar indefinidamente.

La corrección analiza el encabezado en una estructura local ec_host_cmd_request_header y lo copia en in_msg solo después de que la longitud haya sido acotada por sizeof(data->in_msg), e ignora las interrupciones de selección de chip y RVLI fuera de SHI_STATE_READY_TO_RECV/SHI_STATE_RECEIVING. Persiste una condición de carrera residual y acotada: una interrupción de fin de transacción aún restablece el estado a listo mientras el hilo de comando de host posee el búfer, por lo que una segunda solicitud válida aún puede sobrescribir el contenido de la solicitud en vuelo, a diferencia del backend NPCX que se estaciona en SHI_STATE_CNL_RESP_NOT_RDY mientras el búfer está en uso.

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 race condition en manejador SPI del EC que permite lectura OOB de 64 KiB (T1005) y sobrescritura de buffer con privilegios elevados tras eludir verificación (T1068). Requiere acceso local al bus SHI o SO comprometido (AV:L, no requiere UI).

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-19571",
  "cveTags": [],
  "metrics": {
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "id": "CVE-2026-19571",
          "role": "CISA Coordinator",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "version": "2.0.3",
          "timestamp": "2026-10-09T17:57:11.124067Z"
        }
      }
    ],
    "cvssMetricV31": [
      {
        "type": "Secondary",
        "source": "vulnerabilities@zephyrproject.org",
        "cvssData": {
          "scope": "UNCHANGED",
          "version": "3.1",
          "baseScore": 6.7,
          "attackVector": "LOCAL",
          "baseSeverity": "MEDIUM",
          "vectorString": "CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:H",
          "integrityImpact": "NONE",
          "userInteraction": "NONE",
          "attackComplexity": "HIGH",
          "availabilityImpact": "HIGH",
          "privilegesRequired": "NONE",
          "confidentialityImpact": "HIGH"
        },
        "impactScore": 5.2,
        "exploitabilityScore": 1.4
      }
    ]
  },
  "affected": [
    {
      "source": "vulnerabilities@zephyrproject.org",
      "affectedData": [
        {
          "vendor": "zephyrproject",
          "product": "zephyr",
          "versions": [
            {
              "status": "affected",
              "version": "3.3.0",
              "lessThan": "4.5.0",
              "versionType": "semver"
            }
          ],
          "packageName": "zephyr",
          "programFiles": [
            "subsys/mgmt/ec_host_cmd/backends/ec_host_cmd_backend_shi_ite.c"
          ],
          "collectionURL": "https://github.com/zephyrproject-rtos/zephyr",
          "defaultStatus": "unaffected",
          "programRoutines": [
            {
              "name": "shi_ite_cs_callback"
            },
            {
              "name": "shi_ite_int_handler"
            },
            {
              "name": "shi_ite_parse_header"
            }
          ]
        }
      ]
    }
  ],
  "published": "2026-10-09T08:16:54.817",
  "references": [
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/commit/0636e65c825e810ad97f154606365870152d402f",
      "source": "vulnerabilities@zephyrproject.org"
    },
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-4x98-6536-cwjv",
      "source": "vulnerabilities@zephyrproject.org"
    }
  ],
  "vulnStatus": "Awaiting Analysis",
  "weaknesses": [
    {
      "type": "Secondary",
      "source": "vulnerabilities@zephyrproject.org",
      "description": [
        {
          "lang": "en",
          "value": "CWE-362"
        }
      ]
    }
  ],
  "descriptions": [
    {
      "lang": "en",
      "value": "The ITE IT8xxx2 SHI host-command backend (subsys/mgmt/ec_host_cmd/backends/ec_host_cmd_backend_shi_ite.c) copied the 8-byte host-command request header from the SPI Rx FIFO directly into the shared receive buffer data->in_msg and only afterwards checked the protocol version and the derived packet length. The interrupt handler also accepted a chip-select assertion and an Rx-valid-length (RVLI) interrupt in any driver state other than SHI_STATE_DISABLED, so a new header could be parsed while the host-command thread was still processing the previous request out of the very same buffer.\n\nThe host processor is the SPI controller and drives both chip select and the clock. After sending a well-formed request it can immediately de-assert chip select — which returns the driver to the ready state and re-enables the FIFO — and start a second transaction carrying a header with data_len = 0xFFFF. Those eight bytes are written into in_msg before the oversized length is rejected, so they land in a buffer whose contents verify_rx() in subsys/mgmt/ec_host_cmd/ec_host_cmd_handler.c has already validated. If this lands in the window before the host-command thread executes args.input_buf_size = rx_header->data_len, the framework hands the registered command handler a 65535-byte input length over a 256-byte buffer.\n\nThe result is an out-of-bounds read of up to roughly 64 KiB beyond the request buffer: command handlers that copy or echo input_buf_size bytes disclose adjacent embedded-controller memory back to the host or overflow the response buffer, and a read past the end of SRAM faults the controller. The same race also allows cmd_id and cmd_ver to be swapped after checksum verification and after handler lookup. Exploitation requires the ability to drive the inter-processor SHI bus (a compromised host OS or physical access to the SPI lines) and winning a timing race, which the SPI controller can retry indefinitely.\n\nThe fix parses the header into a local struct ec_host_cmd_request_header and copies it into in_msg only after the length has been bounded by sizeof(data->in_msg), and ignores chip-select and RVLI interrupts outside SHI_STATE_READY_TO_RECV/SHI_STATE_RECEIVING. A residual, bounded race remains: an end-of-transaction interrupt still resets the state to ready while the host-command thread owns the buffer, so a valid second request can still overwrite the in-flight request's contents, unlike the NPCX backend which parks in SHI_STATE_CNL_RESP_NOT_RDY while the buffer is in use."
    }
  ],
  "lastModified": "2026-10-09T18:17:08.020",
  "sourceIdentifier": "vulnerabilities@zephyrproject.org"
}