CVE-2026-19737 in ZephyrИнформация

Сводка

по VulDB • 12.10.2026

Функция `i2s_esp32_trigger_check()` в файле `drivers/i2s/i2s_esp32.c` проверяет запрошенное направление только для случая `I2S_DIR_BOTH`. В ветках кода `I2S_DIR_RX` и `I2S_DIR_TX` происходит обращение к полям `dev_cfg->rx.data->configured` / `dev_cfg->tx.data->configured` без предварительной проверки указателей на потоки (stream pointers). Макрос инстанцирования устройства `I2S_ESP32_STREAM_INIT()` устанавливает значения `.conf` и `.data` в NULL для направления, которое не описано в devicetree. Следовательно, при использовании экземпляра, подключенного только к одному направлению — что является стандартной конфигурацией для аудиовыхода или светодиодных лент `worldsemi,ws2812-i2s` — обращение к другому направлению приводит к разыменованию нулевого указателя (NULL pointer dereference) вместо возврата ошибки.

Функция `i2s_trigger()` является системным вызовом Zephyr, а функция `z_vrfy_i2s_trigger()` в файле `drivers/i2s/i2s_handlers.c` проверяет только объект устройства и наличие указателя на API trigger; аргумент `dir` передается драйверу без дополнительной проверки. В сборке с включенным параметром `CONFIG_USERSPACE` поток пользовательского режима (user-mode thread), которому предоставлен доступ к устройству I2S, может выполнить один вызов `i2s_trigger()`, указав неподключенное направление, что приведет к загрузке данных по адресу 0 в режиме ядра. Среди чипов Espressif с данным драйвером пользовательский режим доступен только для SoC на архитектуре RISC-V с параметром `CONFIG_RISCV_PMP`; версия v4.4.0 является первой релизной версией, где такая конфигурация может быть собрана: ESP32-C6 HPCORE выбирает RISCV_PMP, если он не собирается для MCUboot. ESP32-C5 в ветке v4.4.x поддерживает те же области PMP и поддержку линкера пользовательского режима, но по умолчанию не включает RISCV_CV_PMP. Целевые платформы Xtensa от Espressif не поддерживают Zephyr userspace; в сборках без поддержки пользователей (non-userspace build) ошибка может возникать только из кода приложений ядра.

Влияние ограничивается доступностью: обращение представляет собой чтение по смещению 0 отсутствующей структуры потока, поэтому у атакующего нет контроля над смещением, нет примитива записи и возможности утечки информации. При обработчике ошибок по умолчанию (fatal-error handler) возникающее исключение приводит к остановке системы, предоставляя непривилегированному потоку пользовательского режима возможность организации отказа в обслуживании (DoS) на уровне всей системы. Исправление добавляет ту же проверку указателя, которая уже выполнялась для ветки `I2S_DIR_BOTH`, и возвращает `-ENOSYS` для направления, которое данный экземпляр не реализует; другие точки входа драйвера (`i2s_esp32_config_check()`, `i2s_esp32_config_get()`, `i2s_esp32_read()`, `i2s_esp32_write()`) уже защищали указатели, и статический аудит не выявил аналогичных незащищенных путей.

Дефект драйвера старше указанного диапазона затронутых версий. Незащищенное разыменование присутствует начиная с v4.2.0 (достигается через `i2s_esp32_trigger_stream()`, где проверка `if (stream)` тестирует адрес члена структуры и никогда не возвращает false) и принимает свою текущую форму в функции `i2s_esp32_trigger_check()` в версии v4.3.0. Ни одна конфигурация Espressif внутри дерева исходных кодов до v4.4.0 не может запустить поток пользовательского режима, поэтому в версиях v4.2.x и v4.3.x аргумент направления может поступать только из доверенного кода ядра. Эти релизы содержат уязвимость, но не указаны как затронутые; исправление также было объединено с веткой v4.3-branch в качестве меры усиления защиты (hardening).

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Ответственный

Zephyr

Резервировать

13.08.2026

Раскрытие

11.10.2026

Модерация

принято

Вход

VDB-416737

EPSS

0.00100

KEV

Нет

Деятельности

Очень низкий

Источники

Might our Artificial Intelligence support you?

Check our Alexa App!