# 漏洩したSentinel値は、Chrome V8 HardenProtectのテクニカル分析をバイパスしますSentinel valueはアルゴリズムにおける特殊な値で、通常はループまたは再帰アルゴリズムの終了条件として存在します。Chromeのソースコードには多くのSentinel valueがあります。最近の研究によると、TheHoleオブジェクトを漏洩させることで、CVE-2021-38003およびCVE-2022-1364のサンドボックス内で任意のコード実行が可能になることが示されています。Googleチームはその後、これら2つの野外脆弱性に対して更新を行いました。TheHoleオブジェクトの他に、V8にはJavaScriptに漏洩すべきでない他のネイティブオブジェクトがあります。本記事では、Uninitialized Oddballオブジェクトについて議論します。この回避方法は、現在の最新のV8でも依然として利用可能です。V8の大部分のネイティブオブジェクトはv8/src/roots/roots.hファイルで定義されており、これらのオブジェクトはメモリ内で隣接して配置されています。一度、漏洩してはいけないネイティブオブジェクトがJavaScriptに漏洩すると、サンドボックス内で任意のコード実行が可能になる可能性があります。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-263e5651876fc00c4e0af0cfcd350210)この方法を検証するために、V8のネイティブ関数を変更して、Uninitialized OddballをJavaScriptに漏洩させることができます。具体的には、%TheHole()関数内のisolateに対するオフセットを変更して、Uninitialized Oddballを返すようにします。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-26c26345e3ec4effeea2e3e6b7cd8772)Uninitialized Oddballを利用することで、相対的に任意の読み書きが実現できます。最適化されたJavaScriptのread関数は、JavaScriptのセマンティクスに従ってオフセットを計算し、配列の値を取得することで、タイプ混乱を引き起こし、任意の読み取りを実現します。! [独占公開バイパス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)提案された修正案は、最適化された関数が配列要素を返す際に、配列のmapのチェックを追加し、オフセットを直接計算して配列の値を返すのを避けることです。注意すべきは、この方法はChromeだけでなく、他のV8エンジンを使用しているソフトウェアにも影響を及ぼす可能性があるということです。例えば、Skypeは現在もこの脆弱性を修正していません。x86では、アドレス圧縮がないため、任意の読み書きはプロセス全体に対して直接行われます。! [独占公開バイパス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)全体として、Sentinel value内のuninitialized_Oddballを漏洩させることで、任意読みの原語を実現できます。V8には、同様の問題を引き起こす可能性のある他のSentinel valueも存在します。これらのSentinel valueを変数としてfuzzerに追加し、より多くの潜在的な利用原語を掘り下げることをお勧めします。正式にセキュリティ問題として扱われるかどうかに関わらず、この種の問題はハッカーが完全な利用を実現するまでの期間を大幅に短縮するでしょう。
Chrome V8 Sentinel Value Leak の脆弱性分析と防御
漏洩したSentinel値は、Chrome V8 HardenProtectのテクニカル分析をバイパスします
Sentinel valueはアルゴリズムにおける特殊な値で、通常はループまたは再帰アルゴリズムの終了条件として存在します。Chromeのソースコードには多くのSentinel valueがあります。最近の研究によると、TheHoleオブジェクトを漏洩させることで、CVE-2021-38003およびCVE-2022-1364のサンドボックス内で任意のコード実行が可能になることが示されています。Googleチームはその後、これら2つの野外脆弱性に対して更新を行いました。
TheHoleオブジェクトの他に、V8にはJavaScriptに漏洩すべきでない他のネイティブオブジェクトがあります。本記事では、Uninitialized Oddballオブジェクトについて議論します。この回避方法は、現在の最新のV8でも依然として利用可能です。
V8の大部分のネイティブオブジェクトはv8/src/roots/roots.hファイルで定義されており、これらのオブジェクトはメモリ内で隣接して配置されています。一度、漏洩してはいけないネイティブオブジェクトがJavaScriptに漏洩すると、サンドボックス内で任意のコード実行が可能になる可能性があります。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
この方法を検証するために、V8のネイティブ関数を変更して、Uninitialized OddballをJavaScriptに漏洩させることができます。具体的には、%TheHole()関数内のisolateに対するオフセットを変更して、Uninitialized Oddballを返すようにします。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
Uninitialized Oddballを利用することで、相対的に任意の読み書きが実現できます。最適化されたJavaScriptのread関数は、JavaScriptのセマンティクスに従ってオフセットを計算し、配列の値を取得することで、タイプ混乱を引き起こし、任意の読み取りを実現します。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
提案された修正案は、最適化された関数が配列要素を返す際に、配列のmapのチェックを追加し、オフセットを直接計算して配列の値を返すのを避けることです。
注意すべきは、この方法はChromeだけでなく、他のV8エンジンを使用しているソフトウェアにも影響を及ぼす可能性があるということです。例えば、Skypeは現在もこの脆弱性を修正していません。x86では、アドレス圧縮がないため、任意の読み書きはプロセス全体に対して直接行われます。
! 独占公開バイパス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
全体として、Sentinel value内のuninitialized_Oddballを漏洩させることで、任意読みの原語を実現できます。V8には、同様の問題を引き起こす可能性のある他のSentinel valueも存在します。これらのSentinel valueを変数としてfuzzerに追加し、より多くの潜在的な利用原語を掘り下げることをお勧めします。正式にセキュリティ問題として扱われるかどうかに関わらず、この種の問題はハッカーが完全な利用を実現するまでの期間を大幅に短縮するでしょう。