CVE-2026-19737

Estado: Pendiente de análisisMedia (5.5)—
Gravedad5.5Media · CVSS 3.1
Probabilidad de explotación0.10 %mayor que el 1 % de las CVE
Explotación activaNono figura en el catálogo de CISA
Exploit públicoNo conocidosin código público localizado

i2s_esp32_trigger_check() en drivers/i2s/i2s_esp32.c valida la dirección solicitada solo para I2S_DIR_BOTH. Las ramas I2S_DIR_RX e I2S_DIR_TX leen dev_cfg->rx.data->configured / dev_cfg->tx.data->configured sin comprobar primero los punteros de stream. La macro de instancia de dispositivo I2S_ESP32_STREAM_INIT() establece tanto .conf como .data en NULL para una dirección que el devicetree no describe, por lo que en una instancia que cableada solo una dirección — la forma normal para salida de audio o una tira LED worldsemi,ws2812-i2s — la otra dirección desreferencia un puntero NULL en lugar de devolver un error.

Leer descripción completaMostrar menos

i2s_trigger() es una llamada del sistema Zephyr, y z_vrfy_i2s_trigger() en drivers/i2s/i2s_handlers.c valida solo el objeto del dispositivo y la presencia del puntero de API de disparo; el argumento dir se pasa al controlador sin validar. En una compilación con CONFIG_USERSPACE habilitado, un hilo en modo usuario que ha recibido el dispositivo I2S puede emitir una única llamada i2s_trigger() nombrando la dirección no cableada y causar una carga desde la dirección 0 en modo kernel. Entre las piezas Espressif que llevan este controlador, el espacio de usuario está disponible en el árbol solo en SoCs RISC-V con CONFIG_RISCV_PMP, y v4.4.0 es la primera versión donde es compilable: el ESP32-C6 HPCORE selecciona RISCV_PMP cuando no está compilado para MCUboot. ESP32-C5 en v4.4.x lleva el mismo soporte de región PMP y cargador de espacio de usuario, pero no selecciona RISCV_PMP por defecto. Los objetivos Xtensa de Espressif no soportan espacio de usuario de Zephyr, y en una compilación sin espacio de usuario la dirección incorrecta solo puede provenir de código de aplicación en kernel.

El impacto se limita a la disponibilidad: el acceso es una lectura en desplazamiento 0 de la estructura de stream faltante, por lo que no hay desplazamiento controlado por el atacante, no hay primitiva de escritura y no hay divulgación de información. Con el controlador de error fatal por defecto la excepción resultante detiene el sistema, dando a un hilo en modo usuario sin privilegios una denegación de servicio en todo el sistema. La corrección añade la misma comprobación de puntero que la rama I2S_DIR_BOTH ya realizaba y devuelve -ENOSYS para una dirección que la instancia no implementa; los otros puntos de entrada del controlador (i2s_esp32_config_check(), i2s_esp32_config_get(), i2s_esp32_read(), i2s_esp32_write()) ya protegían los punteros, y una auditoría estática no encontró ninguna ruta desprotegida equivalente.

El defecto del controlador es más antiguo que el rango afectado. La desreferencia desprotegida está presente desde v4.2.0 (alcanzada a través de i2s_esp32_trigger_stream(), cuya guardia if (stream) prueba la dirección de un miembro de struct y nunca es falsa) y toma su forma actual i2s_esp32_trigger_check() en v4.3.0. Ninguna configuración Espressif en el árbol anterior a v4.4.0 puede ejecutar un hilo en modo usuario, por lo que en v4.2.x y v4.3.x el argumento de dirección solo puede provenir de código kernel de confianza. Esas versiones llevan el bug pero no están listadas como afectadas; la corrección también ha sido fusionada a v4.3-branch como endurecimiento.

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

CVSS

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

Probabilidad de explotación (EPSS)

Probabilidad de explotación en los próximos 30 días
0.10 %
Percentil entre todas las CVEs puntuadas
1
Fecha de la puntuación
20/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:L/PR:L permite escalada: thread no privilegiado causa NULL pointer dereference en kernel. Impacto: DoS del sistema entero (halt).

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-19737",
  "cveTags": [],
  "metrics": {
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "id": "CVE-2026-19737",
          "role": "CISA Coordinator",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "version": "2.0.3",
          "timestamp": "2026-10-16T15:45:22.302843Z"
        }
      }
    ],
    "cvssMetricV31": [
      {
        "type": "Secondary",
        "source": "vulnerabilities@zephyrproject.org",
        "cvssData": {
          "scope": "UNCHANGED",
          "version": "3.1",
          "baseScore": 5.5,
          "attackVector": "LOCAL",
          "baseSeverity": "MEDIUM",
          "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H",
          "integrityImpact": "NONE",
          "userInteraction": "NONE",
          "attackComplexity": "LOW",
          "availabilityImpact": "HIGH",
          "privilegesRequired": "LOW",
          "confidentialityImpact": "NONE"
        },
        "impactScore": 3.6,
        "exploitabilityScore": 1.8
      }
    ]
  },
  "affected": [
    {
      "source": "vulnerabilities@zephyrproject.org",
      "affectedData": [
        {
          "vendor": "zephyrproject",
          "product": "zephyr",
          "versions": [
            {
              "status": "affected",
              "version": "4.4.0",
              "lessThan": "4.5.0",
              "versionType": "semver"
            }
          ],
          "packageName": "zephyr",
          "programFiles": [
            "drivers/i2s/i2s_esp32.c"
          ],
          "collectionURL": "https://github.com/zephyrproject-rtos/zephyr",
          "defaultStatus": "unaffected",
          "programRoutines": [
            {
              "name": "i2s_esp32_trigger"
            },
            {
              "name": "i2s_esp32_trigger_check"
            }
          ]
        }
      ]
    }
  ],
  "published": "2026-10-11T18:16:58.930",
  "references": [
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/commit/0d82dbbe72f154de32cc45021a9f59d9a737246b",
      "source": "vulnerabilities@zephyrproject.org"
    },
    {
      "url": "https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-5g9q-h8wq-rrf3",
      "source": "vulnerabilities@zephyrproject.org"
    }
  ],
  "vulnStatus": "Awaiting Analysis",
  "weaknesses": [
    {
      "type": "Secondary",
      "source": "vulnerabilities@zephyrproject.org",
      "description": [
        {
          "lang": "en",
          "value": "CWE-476"
        }
      ]
    }
  ],
  "descriptions": [
    {
      "lang": "en",
      "value": "i2s_esp32_trigger_check() in drivers/i2s/i2s_esp32.c validates the requested direction only for I2S_DIR_BOTH. The I2S_DIR_RX and I2S_DIR_TX branches read dev_cfg->rx.data->configured / dev_cfg->tx.data->configured without first checking the stream pointers. The device instantiation macro I2S_ESP32_STREAM_INIT() sets both .conf and .data to NULL for a direction the devicetree does not describe, so on an instance that wires only one direction — the normal shape for audio output or a worldsemi,ws2812-i2s LED strip — the other direction dereferences a NULL pointer instead of returning an error.\n\ni2s_trigger() is a Zephyr syscall, and z_vrfy_i2s_trigger() in drivers/i2s/i2s_handlers.c validates only the device object and the presence of the trigger API pointer; the dir argument is passed to the driver unvalidated. On a build with CONFIG_USERSPACE enabled, a user-mode thread that has been granted the I2S device can issue a single i2s_trigger() call naming the unwired direction and cause a load from address 0 in kernel mode. Among the Espressif parts that carry this driver, userspace is available in-tree only on RISC-V SoCs with CONFIG_RISCV_PMP, and v4.4.0 is the first release where that is buildable: the ESP32-C6 HPCORE selects RISCV_PMP when it is not built for MCUboot. ESP32-C5 in v4.4.x carries the same PMP-region and userspace linker support but does not select RISCV_PMP by default. Espressif Xtensa targets do not support Zephyr userspace, and in a non-userspace build the bad direction can only come from in-kernel application code.\n\nThe impact is limited to availability: the access is a read at offset 0 of the missing stream structure, so there is no attacker-controlled offset, no write primitive and no information disclosure. With the default fatal-error handler the resulting exception halts the system, giving an unprivileged user-mode thread a system-wide denial of service. The fix adds the same pointer check the I2S_DIR_BOTH branch already performed and returns -ENOSYS for a direction the instance does not implement; the driver's other entry points (i2s_esp32_config_check(), i2s_esp32_config_get(), i2s_esp32_read(), i2s_esp32_write()) already guarded the pointers, and a static audit found no equivalent unguarded path.\n\nThe driver defect is older than the affected range. The unguarded dereference is present from v4.2.0 (reached through i2s_esp32_trigger_stream(), whose if (stream) guard tests the address of a struct member and is never false) and takes its present i2s_esp32_trigger_check() form in v4.3.0. No in-tree Espressif configuration before v4.4.0 can run a user-mode thread, so in v4.2.x and v4.3.x the direction argument can only come from trusted kernel code. Those releases carry the bug but are not listed as affected; the fix has also been merged to v4.3-branch as hardening."
    }
  ],
  "lastModified": "2026-10-16T16:17:05.303",
  "sourceIdentifier": "vulnerabilities@zephyrproject.org"
}