# Google Chrome V8エンジンにおけるセンチネル値とそのセキュリティリスクの分析Sentinel valueはアルゴリズムにおける特別な値で、ループや再帰の終了条件によく使用されます。Chromeのソースコードには複数のSentinel valueが含まれており、その中にはJavaScript環境に漏洩するとセキュリティ上の問題を引き起こす可能性があるものがあります。本稿では、漏洩したUninitialized Oddballオブジェクトを利用してChrome V8 HardenProtectメカニズムを回避する方法を探ります。## V8におけるセンチネル値V8のソースコードのroots.hファイルは、大量のネイティブオブジェクトを定義しており、これらはメモリ内で順番に配置されています。これらのネイティブオブジェクトがJavaScriptに公開されるべきではない場合、漏洩するとサンドボックスの脱出につながる可能性があります。以前のTheHoleオブジェクトの漏洩は、典型的なケースです。最新版V8の問題を検証するために、%TheHole()関数を変更して、未初期化のOddballオブジェクトを返すようにできます:JavaScriptのprint(%デバッグ印刷(%ホール()));// 出力:初期化されていない値! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-263e5651876fc00c4e0af0cfcd350210)## HardenType保護のバイパスUninitialized Oddballを利用して、以下のPoCコードを構築することで任意の読み取りを実現できます:JavaScriptの関数 read(obj, idx) { obj[idx]を返します。}初期化されていない = %TheHole();arr = [1.1];%最適化のための関数を準備する(読む);read(arr、0);read(arr、0);%次回呼び出しで関数を最適化(読み取る);read(arr、0);print(read(uninitialized、0x1234n));! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-26c26345e3ec4effeea2e3e6b7cd8772)逆アセンブルされた最適化されたread関数を見ると、obj.propのValueタイプを厳密にチェックしておらず、JavaScriptの意味に従ってオフセットを計算し、配列要素を返しているため、型の混乱が生じて任意の読み取りが実現されています。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-4c091ca0e153e953eb168e99762ff7cc)最適化された関数が配列要素を返す際、配列のmapをチェックして、オフセット戻り値を直接計算しないようにすることを提案しています。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-1e3fda77c04bceafdcc40413824a5d37)## PatchGapリスク警告分析の結果、一部のソフトウェア、例えばSkypeにはPatchGapの問題が存在する可能性があり、その脆弱性はまだ修正されていません。ハッカーはこの脆弱性を利用して、短時間で完全な攻撃チェーンを構築する可能性があります。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-ed89289bebf59d4b27f5bffb5511a8c5)さらに、新しい回避方法が公開された後、一部の歴史的な脆弱性((Issue1314616、Issue1216437))の悪用の難易度が大幅に低下しました。ベンダーは関連する脆弱性のセキュリティリスクを再評価することをお勧めします。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-0e52075003a8ee2ca492a5fc9f35c36b)! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-230537e420d579aabd89bdd168b20878)## サマリーV8には他にも多くのSentinel valueがあり、さらなる研究が求められます。%TheHole/Uninitialized_Oddballなどを変数としてFuzzerに追加し、新しい利用原語を発掘することを検討することをお勧めします。この種の問題が正式にセキュリティ問題としてリストされているかどうかにかかわらず、それはハッカーの完全な利用サイクルを大幅に短縮する可能性があります。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-506159c94c9e0988552cbcbd13d971e1)! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-e9e2000fd501b69ee3ee643a459a26dd)
Chrome V8エンジンのSentinel Valueのセキュリティリスク分析と利用
Google Chrome V8エンジンにおけるセンチネル値とそのセキュリティリスクの分析
Sentinel valueはアルゴリズムにおける特別な値で、ループや再帰の終了条件によく使用されます。Chromeのソースコードには複数のSentinel valueが含まれており、その中にはJavaScript環境に漏洩するとセキュリティ上の問題を引き起こす可能性があるものがあります。本稿では、漏洩したUninitialized Oddballオブジェクトを利用してChrome V8 HardenProtectメカニズムを回避する方法を探ります。
V8におけるセンチネル値
V8のソースコードのroots.hファイルは、大量のネイティブオブジェクトを定義しており、これらはメモリ内で順番に配置されています。これらのネイティブオブジェクトがJavaScriptに公開されるべきではない場合、漏洩するとサンドボックスの脱出につながる可能性があります。以前のTheHoleオブジェクトの漏洩は、典型的なケースです。
最新版V8の問題を検証するために、%TheHole()関数を変更して、未初期化のOddballオブジェクトを返すようにできます:
JavaScriptの print(%デバッグ印刷(%ホール())); // 出力:初期化されていない値
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
HardenType保護のバイパス
Uninitialized Oddballを利用して、以下のPoCコードを構築することで任意の読み取りを実現できます:
JavaScriptの 関数 read(obj, idx) { obj[idx]を返します。 }
初期化されていない = %TheHole(); arr = [1.1]; %最適化のための関数を準備する(読む); read(arr、0); read(arr、0); %次回呼び出しで関数を最適化(読み取る); read(arr、0);
print(read(uninitialized、0x1234n));
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
逆アセンブルされた最適化されたread関数を見ると、obj.propのValueタイプを厳密にチェックしておらず、JavaScriptの意味に従ってオフセットを計算し、配列要素を返しているため、型の混乱が生じて任意の読み取りが実現されています。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
最適化された関数が配列要素を返す際、配列のmapをチェックして、オフセット戻り値を直接計算しないようにすることを提案しています。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
PatchGapリスク警告
分析の結果、一部のソフトウェア、例えばSkypeにはPatchGapの問題が存在する可能性があり、その脆弱性はまだ修正されていません。ハッカーはこの脆弱性を利用して、短時間で完全な攻撃チェーンを構築する可能性があります。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
さらに、新しい回避方法が公開された後、一部の歴史的な脆弱性((Issue1314616、Issue1216437))の悪用の難易度が大幅に低下しました。ベンダーは関連する脆弱性のセキュリティリスクを再評価することをお勧めします。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
サマリー
V8には他にも多くのSentinel valueがあり、さらなる研究が求められます。%TheHole/Uninitialized_Oddballなどを変数としてFuzzerに追加し、新しい利用原語を発掘することを検討することをお勧めします。この種の問題が正式にセキュリティ問題としてリストされているかどうかにかかわらず、それはハッカーの完全な利用サイクルを大幅に短縮する可能性があります。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value