CVE-2026-17052 in Zephyr
要約
〜によって VulDB • 2026年09月21日
drivers/timeaware_gpio/timeaware_gpio_handlers.c の z_vrfy_tgpio_pin_read_ts_ec() 関数(Time-aware GPIO システムコール検証ハンドラ)は、ポートデバイスオブジェクトのみを検証し、呼び出し元が指定した timestamp および event_count の出力ポインタを K_SYSCALL_MEMORY_WRITE() チェックなしでドライバに渡していました。同じファイル内の他のハンドラ(z_vrfy_tgpio_port_get_time(), z_vrfy_tgpio_port_get_cycles_per_second())は既にこのチェックを実行していたため、その省略により1つのシステムコールが保護されない状態になっていました。
tgpio_pin_read_ts_ec() は __syscall として宣言されているため、CONFIG_USERSPACE=y の環境では、TGPIO デバイスオブジェクトへのアクセス権限を持つ特権のないユーザーモードのスレッドが、任意のポインタ値を指定してこれを呼び出すことができます。drivers/timeaware_gpio/timeaware_gpio_intel.c にある tgpio_intel_read_ts_ec() はピンインデックスのみ境界チェックを行ってから、無条件で timestamp = ... および event_count = ... を実行し、ユーザーモードの呼び出し元が選択したアドレスに対して特権モード(supervisor mode)で2つの8バイトストアを実行します。
その結果、ユーザー空間とカーネル空間をまたぐ write-what-where 原語(primitive)が可能になります:ターゲットアドレスは攻撃者が完全に指定可能であり、格納される値はハードウェアのタイムキャプチャおよびイベントカウンターレジスタの内容です。このようにしてカーネルデータ構造体を改ざんすると、呼び出し元のスレッドの特権レベルを特権モードまでエスカレートさせたり、システムクラッシュを引き起こしたりする可能性があります。必要なデバイスオブジェクトのアクセス許可は狭い範囲のカパビリティであり、カーネルメモリへのアクセスを付与することを意図したものではありません。修正では、ドライバ呼び出しの前に2つの不足していた K_SYSCALL_MEMORY_WRITE() 検証が追加されました。
実態における影響範囲は限定的です。CONFIG_USERSPACE=y および CONFIG_TIMEAWARE_GPIO=y を有効にしたビルドのみがこの影響を受けるファイルをコンパイルし、v3.6.0以降ではさらに再配置されたヘッダ () が参照され Z_SYSCALL_* マクロが削除されたため、それらが v4.4.0 後に修正されるまでそのような構成のビルドは失敗していました。この破壊をローカルで修正したダウンストリームツリーと、該当しない v3.5.0 のビルドだけが影響を受ける対象となります。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.