V8エンジンのSentinel値漏洩がセキュリティリスクを引き起こし、初期化されていないオッドボールが新たな攻撃ベクトルとなる

robot
概要作成中

Chrome v8エンジンにおけるSentinel Valueの漏洩によるセキュリティ問題の分析

Sentinel値はアルゴリズムにおける特別な値であり、通常ループや再帰アルゴリズムの終了条件として使用されます。Chromeのソースコードには複数のSentinel値が存在し、そのいくつかがJavaScript環境に漏洩すると安全上の問題を引き起こす可能性があります。

以前の研究では、TheHoleオブジェクトの漏洩を通じて、Chromeサンドボックス内で任意のコード実行が可能であることが示されています。その後、Googleチームは関連するCVEを修正しました。しかし、TheHoleオブジェクトを除いて、v8にはJSに漏洩すべきではない他のネイティブオブジェクトも存在します。本稿では、Uninitialized Oddballオブジェクトについて議論します。この回避方法は、現在の最新のV8でも引き続き利用可能です。

注目すべきは、この方法には一定の汎用性があるということです。

  1. CVE-2021-30551において、最初のPOCは内部の初期化されていない異常値の漏洩です。

  2. CVE-2022-1486では、POCはUninitializedOddballも直接リークしました。

  3. Issue1352549(に未分配CVE)の完全なエクスプロイトコードが示されています。

これらのケースは、Uninitialized Oddballの漏洩が深刻なセキュリティ問題を引き起こす可能性があることを示しています。

V8のセントリナル値

V8のほとんどのネイティブオブジェクトはv8/src/roots/roots.hファイルで定義されており、これらのオブジェクトはメモリ内に順次隣接して配置されています。漏れてはいけないネイティブオブジェクトがJavaScriptに漏れると、サンドボックス内で任意のコードを実行することが可能になるかもしれません。

これを確認するために、V8のネイティブ関数を変更して、Uninitialized OddballをJavaScriptに漏らすことができます。具体的には、%TheHole()関数のisolateに対するオフセットを変更して、Uninitialized Oddballを返すようにします。

! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value

HardenType保護のバイパス

Uninitialized Oddballを利用することで、相対的な任意読み取りを実現できます。重要なコードは以下の通りです:

JavaScriptの 関数 read(obj, idx) { obj[idx]を返します。 }

uninitialized_oddball = %TheHole(); let ab = new ArrayBuffer(8); let fa = new Float64Array(ab); let ia = new BigInt64Array(ab);

悪 = [1.1, 2.2, 3.3]; evil.prop = 1;

%最適化のための関数を準備(読み取る); read(evil、0); read(evil、1); %次の呼び出しで最適化(読み取る); read(evil、0);

let val = read(uninitialized_oddball, "prop"); fa[0] = val; console.log(ia[0]);

最適化されたアセンブリコードでは、JavaScriptのセマンティクスに従ってオフセットを直接計算し、配列の値を返しますが、obj.propがkeyのValueであるかどうかをチェックしていません。これにより、型の混乱が生じ、任意の読み取りが可能になります。

! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value

Uninitialized OddballはV8メモリ内で先に並び、より原始的であり、TheHoleオブジェクトよりも偽造が容易なため、HardenTypeを回避するための最適な方法です。

提案された修正案は、最適化された関数が配列要素を返す際に、配列のマップをチェックして、オフセットを直接計算して配列の値を返さないようにすることです。

! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value

PatchGapの警告

Issue1352549を分析した結果、いくつかのソフトウェアにPatchGapの問題が存在する可能性があることがわかりました。例えば、Skypeは現在もこの脆弱性を修正していません。x86プラットフォームでは、アドレス圧縮がないため、任意の読み書きはプロセス全体に対して相対的です。

SkypeはASLRを有効にしましたが、ファイルが大きいため、ハッカーは特定の固定アドレスに対して読み書きするだけで、Skypeのファイル内容を読み書きする高い確率があります。PE解析などの従来の方法と組み合わせることで、全体の脆弱性利用チェーンを完成させることができます。

今回のPatchGapはIssue1352549に関連しているだけでなく、CVE-2022-1486やCVE-2021-30551などの脆弱性の悪用の難易度を大幅に低下させることになります。ハッカーはほぼ追加の研究なしで完全な悪用を実現できます。

! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value

まとめ

この記事では、Uninitialized Oddballの漏洩を通じて任意の読み取りプリミティブを実現する方法について簡単に説明します。V8には他にも多くのSentinel値があり、同様のセキュリティリスクが存在する可能性があります。これにより、私たちに以下の示唆を与えます:

  1. 他の未初期化のOddballの漏洩は、V8 RCEを簡単に実現できるでしょうか。

  2. この種の問題が正式にセキュリティ問題と見なされるべきかどうかは、依然として議論があります。

  3. 新しいエクスプロイト プリミティブをマイニングするために、Fuzzer で %TheHole/Uninitialized Oddball を変数として追加する必要がありますか?

いずれにせよ、この種の問題はハッカーが完全に利用するまでのサイクルを大幅に短縮するため、私たちが高く重視すべきです。

! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value

! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value

! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value

! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value

! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value

SENC2.25%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 5
  • 共有
コメント
0/400
HallucinationGrowervip
· 7時間前
なんで漏れるんだよ
原文表示返信0
CodeAuditQueenvip
· 7時間前
また一つのCVE変種アタックサーフェス うーん
原文表示返信0
WhaleWatchervip
· 7時間前
グーグルは火遊びをしているのか?歴史を逆行させている
原文表示返信0
BearMarketSurvivorvip
· 7時間前
本当に終わらないバグ修正
原文表示返信0
CryptoAdventurervip
· 7時間前
またIQ税を支払う良い時期が来ましたか?わかる人にはわかる
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)