# Chrome V8エンジンにおけるSentinel Valueの漏洩によるセキュリティリスクの探求Sentinel valueはアルゴリズムで特別なマークとして使用される値であり、通常はループや再帰の終了条件として用いられます。Chrome V8エンジンのソースコードには複数のSentinel valueが存在し、その中にはJavaScript環境に漏洩すべきでないものがあります。本記事では、Uninitialized Oddballオブジェクトを漏洩させてChrome V8 HardenProtectメカニズムを回避する方法について議論します。## V8のセンチネル値V8ソースコードのroots.hファイルには、多くのネイティブオブジェクトが定義されており、これらはメモリ内で隣接して配置されています。これらのオブジェクトがJavaScriptに漏洩すると、サンドボックスのエスケープが発生する可能性があります。私たちは、V8のネイティブ関数を変更することでこれを検証できます。たとえば、%TheHole()関数のオフセットを変更して、TheHoleオブジェクトではなく、Uninitialized Oddballオブジェクトを返すようにします。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-263e5651876fc00c4e0af0cfcd350210)## HardenType保護のバイパスUninitialized Oddballオブジェクトを利用することで、比較的任意のメモリ読み取りを実現できます。重要な点は、最適化されたJavaScriptのread関数では、オブジェクトのprop属性が正しいかどうかのみがチェックされ、obj.propをキーとする値はチェックされていないことです。これにより、計算過程で型の混乱が発生し、任意の読み取りが実現しました。最適化されたアセンブリコードを分析すると、uninitialized_oddballが渡されたとき、プログラムは直接オフセットを計算してデータを読み取ることがわかりますが、型チェックは行われません。この方法はTheHoleオブジェクトと比べて構築と利用が容易です。! [独占公開バイパス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)! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-1e3fda77c04bceafdcc40413824a5d37)! [独占公開バイパス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)## PatchGapセキュリティ警告既知の歴史的な脆弱性に注目するだけでなく、私たちはベンダーが基盤コンポーネントで静かに修正した問題にも注意を払う必要があります。分析の結果、Skypeソフトウェアは未だにその脆弱性を修正していないことがわかりました。x86プラットフォームでは、アドレス圧縮が不足しているため、任意の読み書きの範囲が広く、ほぼプロセス空間全体を読み書きできる状態です。今回のPatchGapはIssue1352549だけでなく、Issue1314616やIssue1216437などの類似の脆弱性も含まれています。新しいバイパス方法が公開された後、これらの脆弱性の悪用難易度が大幅に低下し、攻撃者はほとんど追加の研究を行うことなく完全な悪用チェーンを完成させることができます。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-506159c94c9e0988552cbcbd13d971e1)## まとめこの記事では、Uninitialized Oddballの漏洩を通じて任意の読み取りを実現する方法について簡単に説明します。V8には他にも複数のSentinel値が存在し、それらも同様の問題を引き起こす可能性があります。これは私たちに次のことを示唆しています:1. その他のuninitialized_Oddballの漏洩もV8サンドボックスからの脱出を引き起こす可能性があります。2. この種の問題が正式なセキュリティ脆弱性と見なされるべきかどうかは、依然として議論の余地があります。3. ファジングテストでSentinel valueを変数として追加し、新しい利用方法を発見することを検討してください。いずれにせよ、この種の問題は攻撃者が完全に利用するまでのサイクルを大幅に短縮するため、高く重視する価値があります。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-e9e2000fd501b69ee3ee643a459a26dd)
Chrome V8エンジンのSentinel Value漏洩のセキュリティリスクと利用分析
Chrome V8エンジンにおけるSentinel Valueの漏洩によるセキュリティリスクの探求
Sentinel valueはアルゴリズムで特別なマークとして使用される値であり、通常はループや再帰の終了条件として用いられます。Chrome V8エンジンのソースコードには複数のSentinel valueが存在し、その中にはJavaScript環境に漏洩すべきでないものがあります。本記事では、Uninitialized Oddballオブジェクトを漏洩させてChrome V8 HardenProtectメカニズムを回避する方法について議論します。
V8のセンチネル値
V8ソースコードのroots.hファイルには、多くのネイティブオブジェクトが定義されており、これらはメモリ内で隣接して配置されています。これらのオブジェクトがJavaScriptに漏洩すると、サンドボックスのエスケープが発生する可能性があります。
私たちは、V8のネイティブ関数を変更することでこれを検証できます。たとえば、%TheHole()関数のオフセットを変更して、TheHoleオブジェクトではなく、Uninitialized Oddballオブジェクトを返すようにします。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
HardenType保護のバイパス
Uninitialized Oddballオブジェクトを利用することで、比較的任意のメモリ読み取りを実現できます。重要な点は、最適化されたJavaScriptのread関数では、オブジェクトのprop属性が正しいかどうかのみがチェックされ、obj.propをキーとする値はチェックされていないことです。これにより、計算過程で型の混乱が発生し、任意の読み取りが実現しました。
最適化されたアセンブリコードを分析すると、uninitialized_oddballが渡されたとき、プログラムは直接オフセットを計算してデータを読み取ることがわかりますが、型チェックは行われません。この方法はTheHoleオブジェクトと比べて構築と利用が容易です。
! 独占公開バイパス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
提案された修正案は、最適化された関数が配列要素を返す際に、配列のマップをチェックすることを追加し、オフセット計算を通じて配列値を直接返すのを避けることです。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
PatchGapセキュリティ警告
既知の歴史的な脆弱性に注目するだけでなく、私たちはベンダーが基盤コンポーネントで静かに修正した問題にも注意を払う必要があります。分析の結果、Skypeソフトウェアは未だにその脆弱性を修正していないことがわかりました。x86プラットフォームでは、アドレス圧縮が不足しているため、任意の読み書きの範囲が広く、ほぼプロセス空間全体を読み書きできる状態です。
今回のPatchGapはIssue1352549だけでなく、Issue1314616やIssue1216437などの類似の脆弱性も含まれています。新しいバイパス方法が公開された後、これらの脆弱性の悪用難易度が大幅に低下し、攻撃者はほとんど追加の研究を行うことなく完全な悪用チェーンを完成させることができます。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
まとめ
この記事では、Uninitialized Oddballの漏洩を通じて任意の読み取りを実現する方法について簡単に説明します。V8には他にも複数のSentinel値が存在し、それらも同様の問題を引き起こす可能性があります。これは私たちに次のことを示唆しています:
その他のuninitialized_Oddballの漏洩もV8サンドボックスからの脱出を引き起こす可能性があります。
この種の問題が正式なセキュリティ脆弱性と見なされるべきかどうかは、依然として議論の余地があります。
ファジングテストでSentinel valueを変数として追加し、新しい利用方法を発見することを検討してください。
いずれにせよ、この種の問題は攻撃者が完全に利用するまでのサイクルを大幅に短縮するため、高く重視する価値があります。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value