OWN NEWS GATHER
← 戻る
The Hacker News

CPUの投機的実行を突く新手法「BTR」が判明、JITエンジンを悪用してLinuxなどのメモリを漏洩

要点

  • セキュリティ研究グループのVUSecなどが、Spectre-v2の新たな脆弱性「Branch Target Reuse(BTR)」を公開した。

  • JITコンパイル環境において、コード解放後に残る古い分岐予測情報を利用し、投機的実行の制御フローを乗っ取る。

  • LinuxカーネルやWebブラウザ、言語ランタイムに影響し、完全に対策されたIntel環境でもrootパスワードハッシュの奪取が実証された。

  • Linuxカーネルにはすでに修正パッチがマージされたほか、GraalVMやMozillaでも対策が進められている。

  • 2026年9月29日、オランダのアムステルダム自由大学の研究グループ「VUSec」およびイタリアのサンタンナ大学院大学(Scuola Superiore Sant'Anna)の研究チームによって、CPUの新たな脆弱性「Branch Target Reuse(BTR)」の詳細が発表された。本脆弱性は、CPUの予測機能を悪用する「Spectre-v2」の新たな派生型であり、Webブラウザや言語ランタイム、OSカーネルに搭載されているJIT(Just-In-Time:プログラム実行時にコードを動的生成する技術)エンジンを標的とする。複数のCPUベンダーにまたがるプロセッサ環境において、既存の保護機能を回避してメモリ内の機密データを読み取られる危険性が示された。

古い分岐予測エントリを再利用する「BTR」の仕組み

BTRは、JITエンジンによる自己書き換えコード(実行中に自身のコードを書き換える処理)と、CPUの間接分岐予測機能との相互作用に起因して発生する。

研究チームのSander Wiebing氏、Yuhui Zhu氏、Alessandro Biondi氏、Cristiano Giuffrida氏らの論文によると、現代のCPUはプログラムコードが書き換えられた後にアーキテクチャ上のコード整合性を復元するものの、BTB(Branch Target Buffer:CPUが分岐先を記録するバッファ)内に残る古い間接分岐予測エントリまでは必ずしも無効化しないという。

JITエンジン内では、元のコードが破棄された後もこの古い分岐予測情報がBTB内に残留する。その後、コードキャッシュが再利用されて新しいコードが配置された際に、この古い分岐先が投機的に参照されることで、メモリ解放後に古いコードを実行してしまうような「一過性のUse-After-Free(transient execute-after-free)」状態が生じる。これにより、攻撃者は投機的実行の制御フローを意図しないオフセットへ誘導し、ソフトウェアの保護機構を回避したり、不正な命令列(ガジェット)を実行させたりすることが可能になる。

攻撃手順とLinux環境での実証結果

BTR攻撃は、JITエンジン上で非特権コードを実行可能な攻撃者が、ホスト環境から機密データを窃取するシナリオを想定している。具体的な攻撃シーケンスは以下の通りである。

  1. 攻撃者がJITエンジンに訓練用のメモリ領域(訓練用チャンク)を割り当てさせ、対象の分岐命令にそこへジャンプさせることで、現在のアドレスを参照するBTBエントリを登録させる。
  2. 攻撃者が訓練用チャンクを解放させた後、同じアドレス空間の一部を再利用する形でターゲット用のメモリ領域を割り当てさせる。
  3. 攻撃者が再び間接分岐をトリガーすると、CPUは破棄されずに残っていた古いBTBエントリを参照し、過去の訓練用チャンクのエントリポイントへ投機的にジャンプする。
  4. 意図しないアドレスへの制御フローの誘導が発生し、結果として機密データの漏洩につながる。

研究チームは、Mozilla FirefoxのJITエンジン「SpiderMonkey」、Java仮想環境の「GraalVM」、およびLinuxカーネルの「cBPF JIT」を対象に検証を行い、悪用の難易度やデータ漏洩速度に違いはあるものの、いずれもBTRの影響を受けることを確認した。

さらに実証実験(PoC)として、デフォルトの保護機能が有効化された最新パッチ適用済みのIntelシステムにおいて、Linuxカーネルからわずか数分でrootパスワードのハッシュ値を漏洩・復元できる2種類のエンドツーエンドのエクスプロイトが開発された。

各ソフトウェアの対応と緩和策

責任ある脆弱性開示プロセスを経て、主要プロジェクトでは対策が進められている。

Linuxカーネルにおいては、本脆弱性に対処するための緩和策がすでにマージされており、「CVE-2026-64507」および「CVE-2026-64508」として識別されている。

また、GraalVMではJITコードキャッシュの配置場所をランダム化することでメモリ領域の再利用を阻害する対策が講じられた。Mozillaに関しては、間接分岐予測バリア(IBPB)を用いた緩和策も検討されたものの、現在はサイト分離(Site Isolation)の完了と展開を優先して進めているという。

補足:SpectreおよびSpectre-v2について

Spectreは2017年に発見されたCPU脆弱性の一連の総称であり、処理速度向上のために分岐先をあらかじめ予測して計算を進める「投機的実行」の仕組みを悪用する。予測が外れた際の計算結果は破棄されるが、CPUキャッシュに残った状態変化の時間を計測(キャッシュタイミングサイドチャネル)することで、本来アクセス権のない機密データを読み取ることができる。Spectre-v2は特に間接分岐予測を標的とし、CPUの予測器を意図的に誤認(ポイズニング)させる手法を指す。

元URL