CVE-2026-19571 in Zephyr
要約
〜によって VulDB • 2026年10月09日
ITE IT8xxx2 SHI ホストコマンドバックエンド (subsys/mgmt/ec_host_cmd/backends/ec_host_cmd_backend_shi_ite.c) は、SPI Rx FIFO から 8 バイトのホストコマンドリクエストヘッダを共有受信バッファ data->in_msg に直接コピーし、その後でプロトコルバージョンと派生パケット長をチェックしていました。割り込みハンドラもまた、SHI_STATE_DISABLED 以外の任意のドライバ状態においてチップセレクトのアサートおよび Rx-valid-length (RVLI) 割り受け入れを受け付けていたため、ホストコマンドスレッドが同じバッファからの前のリクエストを処理している間に、新しいヘッダのパースが行われる可能性がありました。
SPI コントローラであるホストプロセッサはチップセレクトとクロックの両方を駆動します。整形式のリクエスト送信後、直ちにチップセクトをデアサート(これによりドライバが準備完了状態に戻り FIFO が再有効化される)して、data_len = 0xFFFF のヘッダを含む第2トランザクションを開始できます。これらの8バイトは、過大な長さが拒否される前に in_msg に書き込まれるため、検証済みである subsys/mgmt/ec_host_cmd/ec_host_cmd_handler.c の verify_rx() がチェックしたバッファ内に配置されます。もしこれがホストコマンドスレッドが args.input_buf_size = rx_header->data_len を実行する前のウィンドウに該当する場合、フレームワークは登録されたコマンドハンドラに対して 256 バイトのバッファに対し 65535 バイトの入力長を渡します。
その結果、リクエストバッファから最大約 64 KiB にわたる境界外読み取りが発生します:入力_buf_size のバイト数をコピーまたはエコーするコマンドハンドラは隣接するエンベデッドコントローラのメモリ情報をホスト側に開示するか応答バッファをオーバーフローし、SRAM の末尾を超えた読み取りはコントローラにフォールトを引き起こします。同じ競合状態により、チェックサム検証およびハンドラ検索後に cmd_id と cmd_ver が入れ替わることも可能です。攻撃にはプロセッサ間 SHI バスを駆動する能力(侵害されたホスト OS または SPI ラインへの物理的アクセス)とタイミングの競合に勝つことが必要であり、SPI コントローラはこの競合を無限に再試行できます。
修正ではヘッダが local struct ec_host_cmd_request_header にパースされ、長さが sizeof(data->in_msg) によって制限された後にのみ in_msg にコピーされるようになり、SHI_STATE_READY_TO_RECV/SHI_STATE_RECEIVING の外でのチップセレクトおよび RVLI 割り込みは無視されます。残存する境界付きの競合状態があります:トランザクション終了割り込みは依然としてホストコマンドスレッドがバッファを所有している間に状態を準備完了にリセットするため、有効な第2のリクエストが入力中のリクエストの内容を上書きすることが可能です(これはバッファ使用中に SHI_STATE_CNL_RESP_NOT_RDY で待機する NPCX バックエンドとは異なります)。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.