CVE-2026-19737 in Zephyrinfo

Zusammenfassung

von VulDB • 11.10.2026

i2s_esp32_trigger_check() in drivers/i2s/i2s_esp32.c validiert die angeforderte Richtung nur für I2S_DIR_BOTH. Die Zweige I2S_DIR_RX und I2S_DIR_TX lesen dev_cfg->rx.data->configured bzw. dev_cfg->tx.data->configured, ohne zuvor die Stream-Zeiger zu prüfen. Das Makro zur Geräteinstanziierung I2S_ESP32_STREAM_INIT() setzt sowohl .conf als auch .data auf NULL für eine Richtung, die im Device Tree nicht beschrieben ist; bei einer Instanz, die nur eine einzige Richtung verdrahtet – was der normale Zustand für Audioausgabe oder einen worldsemi,ws2812-i2s LED-Streifen ist –, wird in der anderen Richtung ein NULL-Zeiger dereferenziert, anstatt einen Fehler zurückzugeben.

i2s_trigger() ist ein Zephyr-Syscall, und z_vrfy_i2s_trigger() in drivers/i2s/i2s_handlers.c validiert nur das Geräteobjekt und die Existenz des Trigger-API-Pointers; das Argument dir wird unverifiziert an den Treiber weitergegeben. Bei einem Build mit aktiviertem CONFIG_USERSPACE kann ein Thread im User Mode, dem Zugriff auf das I2S-Gerät gewährt wurde, einen einzelnen i2s_trigger()-Aufruf ausführen und die nicht verdrahtete Richtung angeben, was in Kernel-Mode zu einer Ladeoperation von Adresse 0 führt. Unter den Espressif-Chips mit diesem Treiber ist User Space im Tree nur auf RISC-V SoCs mit CONFIG_RISCV_PMP verfügbar; v4.4.0 ist die erste Version, bei der dies buildbar ist: Der ESP32-C6 HPCORE wählt RISCV_PMP aus, wenn er nicht für MCUboot gebaut wird. Der ESP32-C5 in den v4.4.x-Releases trägt dieselbe PMP-Region und User Space Linker-Support unterstützt, wählt jedoch standardmäßig kein RISCV_PMP aus. Espressif Xtensa-Ziele unterstützen keinen Zephyr User Space; bei einem Build ohne User Space kann die falsche Richtung nur von im Kernel befindlichem Anwendungscode stammen.

Die Auswirkung ist auf Verfügbarkeit beschränkt: Der Zugriff ist ein Lesezugriff an Offset 0 der fehlenden Stream-Struktur, es gibt also keine angreiferkontrollierte Offset, kein Write-Primitive und keine Informationspreisgabe. Mit dem Standard-Fatal-Error Handler führt die resultierende Exception zum Systemstopp, was einem nicht privilegierten Thread im User Mode einen systemweiten Denial of Service (DoS) ermöglicht. Die Korrektur fügt dieselbe Pointer-Prüfung hinzu, die der I2S_DIR_BOTH-Zweig bereits durchführte, und gibt -ENOSYS für eine Richtung zurück, die von der Instanz nicht implementiert wird; die anderen Einstiegspunkte des Treibers (i2s_esp32_config_check(), i2s_esp32_config_get(), i2s_esp32_read(), i2s_esp32_write()) schützen die Pointer bereits ab, und ein statischer Audit ergab keine weiteren ungeschützten Pfade.

Der Treiber-Defekt ist älter als der betroffene Bereich. Die ungeschützte Dereferenzierung ist seit v4.2.0 vorhanden (erreicht über i2s_esp32_trigger_stream(), dessen if (stream)-Prüfung die Adresse eines Strukturmitglieds testet und niemals falsch ausfällt) und nimmt ihre aktuelle Form in i2s_esp32_trigger_check() ab v4.3.0 an. Keine im Tree befindliche Espressif-Konfiguration vor v4.4.0 kann einen Thread im User Mode ausführen, daher stammt das Richtungsargument in den Versionen v4.2.x und v4.3.x nur von vertrauenswürdigen Kernel-Code. Diese Releases enthalten den Bug, werden jedoch nicht als betroffen aufgeführt; die Korrektur wurde auch in den v4.3-Zweig gemergt, um Hardening zu gewährleisten.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Zuständig

Zephyr

Reservieren

13.08.2026

Veröffentlichung

11.10.2026

Moderieren

akzeptiert

Eintrag

VDB-416737

EPSS

0.00000

KEV

nein

Aktivitäten

low

Quellen

Might our Artificial Intelligence support you?

Check our Alexa App!