Chrome V8 Engine Sentinel Value Exploit Analysis: RCE は追加の調査なしで達成できます

robot
概要作成中

Chrome V8エンジンでのSentinel値エクスプロイト分析

Sentinel valueはアルゴリズムにおける特殊な値であり、通常はループや再帰アルゴリズムの終了条件として使用されます。Chromeのソースコードには多数のSentinel valueが存在します。以前の研究では、TheHoleオブジェクトの漏洩を通じてChromeサンドボックス内で任意のコードを実行できることが示されました。Googleチームはその後、関連する脆弱性を修正しました。

しかし、V8 には JS に漏洩すべきではない他のネイティブオブジェクトも存在します。本稿では、初期化されていないオッドボールオブジェクトについて説明します。このオブジェクトの漏洩は、現在の最新バージョンの V8 でもサンドボックスをバイパスする方法を引き起こす可能性があります。

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

  1. CVE-2021-30551 の最初の PoC は、内部の初期化されていない異常値を漏洩させることです。

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

  3. Issue1352549 (に未割り当てのCVE)の利用方法が詳しく記載されています。

これらのケースは、未初期化のオッドボール漏洩を利用した攻撃の可能性が重要であることを示しています。

V8におけるセンチネル値

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

これを検証するために、V8のネイティブ関数%TheHole()の戻り値をUninitialized Oddballに変更することができます。

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

HardenType保護のバイパス

Issue1352549 に完全なバイパスコードが提供されています。簡略化されたコアロジックは以下の通りです:

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

初期化されていない = %TheHole(); arr = [1.1]; let res = read(uninitialized, 0x12345); %デバッグ印刷(結果);

このコードは最新の V8 11.0.0 バージョンでも相対的な任意の読み取りを実現できます。

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

最適化された read 関数のアセンブリコードを分析すると、obj の prop 属性が正しいかどうかしか確認しておらず、obj.prop をキーとしての Value を確認していないことがわかります。これにより、計算時に型の混同が発生し、任意の読み取りが実現されました。

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

uninitialized_oddball が渡されたとき、特定の命令から obj を起点として計算を開始し、最終的に vmovsd xmm0,[r9+r11*8+0x7] 命令で任意の読み取りを完了し、データは xmm0 レジスタに保存されます。

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

提案された修正方法は、最適化された関数が配列要素を返す際に、配列のマップを確認し、オフセットを直接計算して配列の値を返すことを避けることです。

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

PatchGapの警告

PatchGap の可能性のあるソフトウェアを調査していると、Skype がこの脆弱性をまだ修正していないことがわかりました。x86 アーキテクチャでは、アドレス圧縮がないため、任意の読み書きはプロセス全体に対して直接行われます。

SkypeはASLRを有効にしていますが、ファイルが大きいため、直接4GBのメモリに配置されてしまいます。そのため、攻撃者は特定の固定アドレスに対して読み書きを行うだけで、Skypeのファイル内容にアクセスする可能性が非常に高くなります。PE解析などの従来の手法と組み合わせることで、全体の脆弱性利用チェーンを完成させることができます。

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

今回のPatchGapは、Issue1352549に関わるだけでなく、Issue1314616やIssue1216437のような利用の難易度を大幅に低下させました。ハッカーは、追加の研究をほとんど必要とせず、以前の未初期化のuninitialized_oddball脆弱性を完全に利用することができます。

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

まとめ

この記事では、Sentinel value の uninitialized_Oddball を漏洩させることにより、任意の読み取り原語を実現する方法について説明します。V8 には他にも Sentinel value が存在し、類似の問題を引き起こす可能性があります。これは私たちに以下の示唆を与えます:

  1. 他のuninitialized_OddballリークもV8のRCEを簡単に達成できますか?

  2. この種の問題が正式に安全問題として扱われるべきかどうかは依然として議論の余地があります。

  3. ファザーに %TheHole/uninitialized_Oddball などの Sentinel 値を変数として追加して、他のエクスプロイト プリミティブをマイニングすることを検討してください。

いずれにせよ、この種の問題はハッカーが完全な利用を実現するサイクルを大幅に短縮します。

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

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

SENC-4.68%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 5
  • リポスト
  • 共有
コメント
0/400
CoffeeNFTradervip
· 07-22 08:13
また一つのセキュリティホールに慌てる。
原文表示返信0
Hash_Banditvip
· 07-21 21:23
jsエンジンマイニングが本物になった...エクスプロイト難易度が最大に達しました
原文表示返信0
ConsensusDissentervip
· 07-20 00:25
また一つのコードブラックホールが現れました。とても恐ろしいです。
原文表示返信0
Blockblindvip
· 07-20 00:19
v8にもそんな大きな脆弱性があるの?笑っちゃう
原文表示返信0
BlockchainTalkervip
· 07-20 00:12
実際、V8がこれに苦労しているのは驚きです... 追伸、私のランタイムアイソレーションはどこにありますか、家族?
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)