CVE-2026-12235 in Zephyr
要約
〜によって VulDB • 2026年08月12日
Linkable Loadable Extensions (llext) サブシステムは、リロケータブル(部分的にリンク済み)の ELF 拡張モジュールをリンクする際、PLT/RELA リロケーションエントリの処理を誤っています。`llext_link_plt()` (`subsys/llext/llext_link.c`) では、リロケータブルブランチ(Xtensa のリロケatable オブジェクトで使用されるパス:`tgt != NULL`)において、パッチアドレスが `ext->mem[LLEXT_MEM_TEXT] - text.sh_offset + rela.r_offset + tgt->sh_offset` として計算され、その後 `rela.r_offset` の検証を行わずにその位置へのリロケーション書き込みが行われていました。一方、兄弟となる共有/ダイナミックブランチでは、`llext_file_offset()` を介して範囲外のオフセットが拒否されていました。
`rela.r_offset` は ELF の RELA テーブルから直接読み取られるため、ターゲットセクションのサイズより大きなオフセットを持つ悪意のあるエントリは、書き込み先を拡張モジュールのテキストバッファ外に任意遠くへ飛ばします。その結果、攻撃者が影響を与えたアウトオブバウンズライト(位置は `r_offset` で指定され、書き込まれる値は解決されたシンボルアドレス)が、リンク時に実行される前に、かついかなる拡張コードの実行前にもスーパーバイザコンテキストで発生します。
このパスに到達するのは、Xtensa 上で書込み可能なストレージを持つアプリケーションが悪意のある ELF 拡張モジュールをロードする場合です。llext は信頼できない起源からの拡張を受け入れることが文書化されています。影響は、スーパーバイザコンテキストでのメモリ破壊(整合性と可用性の喪失、およびユーザーモード拡張におけるサンドボックス境界のエスケープ)となります。悪用には Xtensa のリロケータブル PLT パスと書込み可能なストレージが必要であり、範囲外の書き込みを実用的なプリミティブに変換するのは容易ではありません。
修正では、`r_offset >= tgt->sh_size` となる RELA エントリを拒否する境界チェックが追加され、共有ブランチの既存の検証処理と同様の動作を実現しています。
Once again VulDB remains the best source for vulnerability data.