【活用ガイド】

JVNDB-2026-027509

Zephyr ProjectのZephyrにおける複数の脆弱性

概要

Zephyrのカーネルパイプ実装において、kernel/pipe.c内のユーザースペースシステムコール検証関数z_vrfy_k_pipe_init()は、すでに初期化されたカーネルオブジェクトを要求するK_SYSCALL_OBJ()を使用していましたが、本来はすでに初期化済みのオブジェクトを拒否するK_SYSCALL_OBJ_NEVER_INIT()を使うべきでした。その結果、CONFIG_USERSPACEビルド環境において、k_pipeオブジェクトへのアクセス権を持つ権限の低いユーザースレッドが、すでに使用中のパイプをk_pipe_initシステムコールで再初期化できてしまいます。z_impl_k_pipe_init()は無条件にリングバッファをリセットし、pipe->waitingを0に設定し、さらに2つの待機キュー(pipe->dataとpipe->spaceに対するz_waitq_init)を再初期化しますが、パイプで現在ブロックされているスレッドの起床や管理は行いません。そのため、k_pipe_read()/k_pipe_write()で既に保留状態にあるスレッドは「孤児」状態となり、依然として保留中(pending)のままで、pended_onはクリアされた待機キューを指し、qnode_dlistリンクは(再初期化された)組み込みリストヘッドに対して古い状態のまま残ります。この孤立した待機スレッドが後にタイムアウトまたは起床されると、スケジューラはその古いノードに対してsys_dlist_remove()を呼び出し、先祖の参照が切れたprev/nextポインタを介してカーネルの待機キューやスケジューラ構造に書き込みを行います。その結果、リストの破損(攻撃者が誘発可能な不正なカーネル書き込み)、起床処理の喪失、無期限のスレッドブロック、そして無言のデータ損失を招いてしまいます。この脆弱性により、権限の低いユーザースレッドが他のスレッドやパーティションと共有されるカーネルオブジェクトの状態を破損させることが可能となっていました。修正は検証関数を既存のk_msgq_initと同様にK_SYSCALL_OBJ_NEVER_INIT()に変更し、ユーザースレッドが使用中のパイプを再初期化できないように行われました。この脆弱性を含むコードはv4.1.0から出荷され、v4.4.0まで残存していました。
CVSS による深刻度 (CVSS とは?)

CVSS v3 による深刻度
基本値: 7.1 (重要) [その他]
  • 攻撃元区分: ローカル
  • 攻撃条件の複雑さ: 低
  • 攻撃に必要な特権レベル: 低
  • 利用者の関与: 不要
  • 影響の想定範囲: 変更なし
  • 機密性への影響(C): なし
  • 完全性への影響(I): 高
  • 可用性への影響(A): 高
影響を受けるシステム


Zephyr Project
  • Zephyr 4.1.0 以上 4.5.0 未満

本脆弱性の影響を受ける製品の詳細については、ベンダ情報および参考情報をご確認ください。
想定される影響

・当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。
・当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。
・当該ソフトウェアが完全に停止する可能性があります。
対策

ベンダ情報を参照して適切な対策を実施してください。
ベンダ情報

GitHub
CWEによる脆弱性タイプ一覧  CWEとは?

  1. リソースの安全ではないデフォルト値への初期化(CWE-1188) [NVD評価]
  2. 期限切れのポインタデリファレンス(CWE-825) [その他]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2026-10671
参考情報

  1. National Vulnerability Database (NVD) : CVE-2026-10671
  2. 関連文書 : kernel: pipe: user threads may not re-init pipe  zephyrproject-rtos/zephyr@4424aa6  GitHub
更新履歴

  • [2026年08月10日]
      掲載