# Chrome V8エンジンにおけるSentinel Valueの漏洩によるセキュリティリスクSentinel valueはアルゴリズムにおける特別な値で、ループや再帰アルゴリズムの終了条件によく使用されます。Chromeのソースコードには複数のSentinel valueが存在し、その中のいくつかのオブジェクトはJavaScript環境に漏洩すべきではありません。本記事では、Uninitialized Oddballオブジェクトの漏洩を利用してChrome V8エンジンのHardenProtectメカニズムを回避する方法について探ります。## V8のセンチネル値V8のほとんどのネイティブオブジェクトはv8/src/roots/roots.hファイルで定義されており、これらのオブジェクトはメモリ内で隣接して配置されています。これらのネイティブオブジェクトがJavaScriptに露出してはいけないのに漏洩すると、サンドボックス内で任意のコードが実行される可能性があります。私たちは、V8のネイティブ関数を変更することで、Uninitialized OddballをJavaScriptに漏洩させることができます。たとえば、%TheHole()関数のオフセットを変更して、Uninitialized Oddballオブジェクトを返すようにします。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-263e5651876fc00c4e0af0cfcd350210)## HardenType保護のバイパス漏洩したUninitialized Oddballオブジェクトを利用して、以下のコードを構築することで、相対的な任意の読み取りを実現できます:JavaScriptの関数 read(obj, idx) { obj[idx]を返します。}arr = [1.1, 2.2, 3.3];uninitialized_oddball = %TheHole();(letの場合、i = 0; 私は100000<。 i ++) { read(arr、0); }%次回呼び出しでの最適化(読み取り);結果= read(uninitialized_oddball、0x12345);%デバッグ印刷(結果);最適化されたread関数のアセンブリコードは、配列オフセットを計算する際にobj.propの値の型をチェックせず、JavaScriptのセマンティクスに従って直接計算するため、型の混乱を引き起こし、任意の読み取りを実現しています。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-26c26345e3ec4effeea2e3e6b7cd8772)修正の提案は、最適化された関数が配列要素を返す際に、配列のマップをチェックし、オフセットを直接計算して値を返すのを避けることです。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-4c091ca0e153e953eb168e99762ff7cc)## PatchGapリスク警告 この脆弱性は、現在いくつかの旧バージョンのV8エンジンを使用しているソフトウェア(、例えばSkype)ではまだ修正されていません。x86プラットフォームでは、アドレス圧縮がないため、任意の読み書きがプロセス全体に対して直接行われる可能性があります。この新しいバイパス手法の公開により、関連する脆弱性を利用する難易度が下がりました。ハッカーは追加の研究をほとんど必要とせずに、未初期化のオッドボール脆弱性を完全に利用することができます。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-1e3fda77c04bceafdcc40413824a5d37)## まとめV8には他のSentinel値も存在し、同様のセキュリティ問題を引き起こす可能性があります。さらなる調査をお勧めします:1. 他の未初期化のオッドボールの漏洩もV8のRCEを実現できるのか。2. このような問題を正式にセキュリティ脆弱性としてリストアップすべきか3. Fuzzerテストでは、Sentinel値を変数として追加する必要がありますか?いずれにせよ、このような問題はハッカーが完全に利用するまでの期間を大幅に短縮し、非常に重要です。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-ed89289bebf59d4b27f5bffb5511a8c5)! [独占公開バイパス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)! [独占公開バイパス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)
V8エンジンSentinel Valueの漏洩によるHardenProtectのセキュリティリスクの回避
Chrome V8エンジンにおけるSentinel Valueの漏洩によるセキュリティリスク
Sentinel valueはアルゴリズムにおける特別な値で、ループや再帰アルゴリズムの終了条件によく使用されます。Chromeのソースコードには複数のSentinel valueが存在し、その中のいくつかのオブジェクトはJavaScript環境に漏洩すべきではありません。本記事では、Uninitialized Oddballオブジェクトの漏洩を利用してChrome V8エンジンのHardenProtectメカニズムを回避する方法について探ります。
V8のセンチネル値
V8のほとんどのネイティブオブジェクトはv8/src/roots/roots.hファイルで定義されており、これらのオブジェクトはメモリ内で隣接して配置されています。これらのネイティブオブジェクトがJavaScriptに露出してはいけないのに漏洩すると、サンドボックス内で任意のコードが実行される可能性があります。
私たちは、V8のネイティブ関数を変更することで、Uninitialized OddballをJavaScriptに漏洩させることができます。たとえば、%TheHole()関数のオフセットを変更して、Uninitialized Oddballオブジェクトを返すようにします。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
HardenType保護のバイパス
漏洩したUninitialized Oddballオブジェクトを利用して、以下のコードを構築することで、相対的な任意の読み取りを実現できます:
JavaScriptの 関数 read(obj, idx) { obj[idx]を返します。 }
arr = [1.1, 2.2, 3.3]; uninitialized_oddball = %TheHole();
(letの場合、i = 0; 私は100000<。 i ++) { read(arr、0);
}
%次回呼び出しでの最適化(読み取り);
結果= read(uninitialized_oddball、0x12345); %デバッグ印刷(結果);
最適化されたread関数のアセンブリコードは、配列オフセットを計算する際にobj.propの値の型をチェックせず、JavaScriptのセマンティクスに従って直接計算するため、型の混乱を引き起こし、任意の読み取りを実現しています。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
修正の提案は、最適化された関数が配列要素を返す際に、配列のマップをチェックし、オフセットを直接計算して値を返すのを避けることです。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
PatchGapリスク警告
この脆弱性は、現在いくつかの旧バージョンのV8エンジンを使用しているソフトウェア(、例えばSkype)ではまだ修正されていません。x86プラットフォームでは、アドレス圧縮がないため、任意の読み書きがプロセス全体に対して直接行われる可能性があります。
この新しいバイパス手法の公開により、関連する脆弱性を利用する難易度が下がりました。ハッカーは追加の研究をほとんど必要とせずに、未初期化のオッドボール脆弱性を完全に利用することができます。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
まとめ
V8には他のSentinel値も存在し、同様のセキュリティ問題を引き起こす可能性があります。さらなる調査をお勧めします:
いずれにせよ、このような問題はハッカーが完全に利用するまでの期間を大幅に短縮し、非常に重要です。
! 独占公開バイパス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