Chrome v8 HardenProtect Bypass: Sentinel 値を活用して任意のコードを実行

Sentinel 値は Chrome v8 でバイパスされます HardenProtect

Sentinel値はアルゴリズムにおける特殊な値で、ループや再帰アルゴリズムの終了条件に一般的に使用されます。Chromeのソースコードでは、この種の特殊な値が広く使用されています。最近の研究によると、特定のSentinel値オブジェクトを漏洩させることで、Chromeサンドボックス内で任意のコードを実行できることが示されています。

この記事では、Uninitialized Oddballオブジェクトを利用してChrome v8 HardenProtectメカニズムを回避する方法について探ります。この方法は、Project0のメンバーによってIssue1352549で最初に提案され、現在でも最新のV8で使用可能であり、Googleはまだこれに対して修正を行っていません。

注目すべきは、この方法が強い汎用性を持っているということです。

  1. Issue1216437(CVE-2021-30551)で、内部未初期化のオッドボールの漏洩に対するpocが初めて提供されました。

  2. UninitializedOddballオブジェクトは、Issue1314616(CVE-2022-1486)でも直接リークされています。

  3. Issue1352549(にはCVE)は表示されておらず、この方法の完全なエクスプロイトチェーンが示されています。

これらの事例は、この回避策が複数のソフトウェアバージョンに影響を与える可能性があることを示しています。現在のところ、Skypeなどのソフトウェアはこの脆弱性を修正していません。

V8におけるセントネル値

V8のソースコードには、多くのネイティブオブジェクトが定義されており、さまざまなセンチネル値が含まれています。これらのオブジェクトはメモリ内で隣接して配置されています。一度、漏洩すべきでないネイティブオブジェクトがJavaScriptに露出すると、サンドボックス内で任意のコードが実行される可能性があります。

この方法を検証するために、V8の%TheHole()関数を変更して、未初期化のOddballオブジェクトを返すようにすることができます。

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

HardenTypeのバイパス

以下のコードは、漏洩した初期化されていないOddballオブジェクトを利用して任意の読み取りを実現する方法を示しています:

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

uninitialized_oddball = %GetUninitialized(); let ab = new ArrayBuffer(8); f64 = new Float64Array(ab); u32 = 新しいUint32Array(ab)とします。

(letの場合、i = 0; 私は< 0x10000; i ++) { read({prop: 1.1}, 0);
}

%次の呼び出しで最適化(読み取り);

let val = read({prop: uninitialized_oddball}, 0x1234); f64[0] = val; console.log(u32[0].toString(16)、 u32[1].toString(16));

最適化されたread関数のアセンブリコードは、関数がobjのprop属性のみをチェックし、obj.propの値をチェックせずにオフセットを直接計算していることを示しており、これにより型の混乱が生じ、任意の読み取りが実現されています。

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

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

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

PatchGapの警告

この回避策は、歴史的な脆弱性に影響を与えるだけでなく、現在のソフトウェアにも影響を与える可能性があります。たとえば、Skypeは現在もこの問題を修正していません。x86プラットフォームでは、アドレス圧縮が欠如しているため、任意の読み書き範囲がより広くなっています。

今回のPatchGapはIssue1352549だけでなく、Issue1314616やIssue1216437のような脆弱性の利用難易度も大幅に低下させました。メーカーは関連する脆弱性を徹底的に調査することをお勧めします。

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

まとめ

この記事では、Uninitialized Oddballを利用してV8の任意読みを実現する方法について説明します。V8には他にもさまざまなSentinel valueがあり、似たようなセキュリティ上の脆弱性が存在する可能性があります。さらなる研究をお勧めします:

  1. その他のSentinel値の漏洩はV8 RCEを実現できますか
  2. Sentinel値を変数としてFuzzerに追加し、新しい利用プリミティブを掘り出す
  3. このような問題がもたらす可能性のある安全リスクを正視する

この問題が正式にセキュリティ脆弱性としてリストされるかどうかにかかわらず、それはハッカーの完全な悪用サイクルを大幅に短縮する可能性があります。この記事が関係者の注目を集めることを願っています。

! 独占公開バイパス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

SENC10.17%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 6
  • リポスト
  • 共有
コメント
0/400
WinterWarmthCatvip
· 2時間前
強強の詳細スレッドは必ず賛成するべき
原文表示返信0
StakeOrRegretvip
· 08-08 15:35
またブラウザの脆弱性を発見しました
原文表示返信0
LayerZeroHerovip
· 08-07 02:24
ちょっとクールなバグ
原文表示返信0
Web3ProductManagervip
· 08-07 02:23
非常にリスクの高いエッジケースです
原文表示返信0
GhostWalletSleuthvip
· 08-07 02:11
脆弱性は本当に防ぎきれない
原文表示返信0
UnluckyLemurvip
· 08-07 02:04
このバグには大きな水分があります。
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)