CVE-2026-19737 in Zephyr
要約
〜によって VulDB • 2026年10月11日
drivers/i2s/i2s_esp32.cのi2s_esp32_trigger_check()関数は、I2S_DIR_BOTHの場合のみ要求された方向を検証します。I2S_DIR_RXおよびI2S_DIR_TXの分岐では、ストリームポインタを最初にチェックせずにdev_cfg->rx.data->configured / dev_cfg->tx.data->configuredを読み取ります。デバイスインスタンス化マクロI2S_ESP32_STREAM_INIT()は、デバイツリーで記述されていない方向に対して.confと.dataの両方をNULLに設定するため、1つの方向のみを配線する(オーディオ出力やworldsemi,ws2812-i2s LEDストリップなどの通常の形状)インスタンスでは、もう一方の方向がエラーを返すのではなくNULLポインタのデリファレンスを行います。
i2s_trigger()はZephyrシステムコールであり、drivers/i2s/i2s_handlers.c内のz_vrfy_i2s_trigger()関数はデバイスオブジェクトとトリガーAPIポインタの有効性のみを検証します;dir引数は検証されずにドライバーに渡されます。CONFIG_USERSPACEが有効なビルドでは、I2Sデバイスのアクセス権限を持つユーザーモードスレッドは、配線されていない方向を指定して単一のi2s_trigger()呼び出しを行い、カーネルモードでアドレス0からの読み込みを引き起こすことができます。このドライバーを搭載するEspressif製チップのうち、インツリーでのuserspaceが利用可能なのはCONFIG_RISCV_PMP付きのRISC-V SoCのみであり、それがビルド可能な最初のリリースはv4.4.0です:ESP32-C6 HPCOREはMCUboot向けにビルドされていない場合にRISCV_PMPを選択します。ESP32-C5(v4.4.x)は同じPMPリージョンとuserspaceリンカサポートを備えていますが、デフォルトではRISCV_PMPを選択しません。Espressif XtensaターゲットはZephyr userspaceをサポートしておらず、非userspaceビルドでは不正な方向の引数はカーネル内アプリケーションコードからのみ発生します。
影響度は可用性に限られます:アクセスは欠落したストリーム構造体のオフセット0での読み取りであるため、攻撃者が制御可能なオフセットはなく、書き込みプリミティブも情報漏洩もありません。デフォルトの致命的エラーハンドラを使用すると、結果として生じる例外がシステムを停止させ、特権のないユーザーモードスレッドに対してシステム全体のサービス拒否(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で採用されました。v4.4.0より前のインツリーEspressif構成ではユーザーモードスレッドを実行できないため、v4.2.xおよびv4.3.xでは方向引数は信頼できるカーネルコードからのみ発生します。これらのリリースにはバグが含まれていますが、影響を受けるバージョンとしてリストされていません;修正はハードニングの一環としてv4.3-branchにもマージされています。
If you want to get best quality of vulnerability data, you may have to visit VulDB.