# Chrome V8エンジンにおけるセンティネル値の安全性への影響を深く探るSentinel valueはアルゴリズムにおける特別な値で、ループや再帰アルゴリズムの終了条件によく使用されます。ChromeのソースコードにはさまざまなSentinel valueが存在します。以前の研究では、TheHoleオブジェクトを漏洩させることでChromeサンドボックス内で任意のコード実行が可能になることが示されました。Googleチームはその後、関連する脆弱性を修正しました。しかし、V8にはJavaScriptに漏洩すべきではない他のネイティブオブジェクトも存在します。本稿では、Uninitialized Oddballオブジェクトについて論じます。この回避方法は、Issue1352549で最初に登場しました。注目すべきは、この方法が現在の最新V8バージョンでもまだ利用可能であり、まだ修正されていないことです。この方法は一定の汎用性を持っています:1. Issue1216437(CVE-2021-30551)では、内部の初期化されていないオッドボールのpocを初めて公開しました。2. UninitializedOddballは、Issue1314616(CVE-2022-1486)でも直接リークされました。3.Issue1352549(NoCVE)の影響は注目に値します。これらのケースは、PatchGapの影響を受ける可能性のあるソフトウェアを再評価する必要があることを示しています。現在、Skypeはまだこの脆弱性を修正していません。V8のほとんどのネイティブオブジェクトはv8/src/roots/roots.hファイルで定義されており、メモリ内で隣接して配置されています。これらの漏洩してはいけないネイティブオブジェクトがJavaScriptに漏洩すると、サンドボックス内で任意のコード実行が可能になることがあります。この方法を検証するために、V8のネイティブ関数を修正し、Uninitialized OddballをJavaScriptに漏洩させることができます。具体的には、%TheHole()関数内のisolateに対するオフセットを修正し、Uninitialized Oddballを返すようにします。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-263e5651876fc00c4e0af0cfcd350210)この方法を利用すると、HardenType保護を回避し、相対的に任意の読み書きが可能になります。最適化されたJavaScriptコードを分析すると、obj.propをチェックする際に、obj.propをキーとするValueの検証が行われず、直接JavaScriptの意味に従ってオフセットを計算し、配列の値を取得しているため、型の混乱が生じています。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-26c26345e3ec4effeea2e3e6b7cd8772)uninitialized_oddballがV8メモリ内で前方にソートされ、TheHoleオブジェクトよりも偽造が容易であるため、TheHoleに関連する緩和策が修正された後、この方法は回避の選択肢となった。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-4c091ca0e153e953eb168e99762ff7cc)最適化された関数が配列要素を返す際に、配列のmapをチェックして、オフセットを直接計算して値を返さないようにすることをお勧めします。注意すべきは、Skypeが現在もこの脆弱性を修正していないことです。x86システムでは、アドレス圧縮がないため、任意の読み書きはプロセス全体に対して相対的です。SkypeはASLRを有効にしていますが、ファイルが大きいため、ハッカーは固定アドレスへの読み書きを行うだけで、Skypeファイルの内容にアクセスできる可能性が非常に高くなります。これにより、完全なエクスプロイトチェーンを完成させる難易度が大幅に低下します。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-1e3fda77c04bceafdcc40413824a5d37)今回のPatchGapはIssue1352549だけでなく、新しいバイパス方法の公開により、Issue1314616やIssue1216437などの脆弱性の悪用の難易度が大幅に低下しました。ハッカーは、以前のuninitialized_oddballの漏洩に関する脆弱性を完全に利用するために、ほとんど追加の研究を行う必要がありません。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-ed89289bebf59d4b27f5bffb5511a8c5)V8には他にもさまざまなSentinel valueが存在し、同様のセキュリティリスクがある可能性があります。fuzzテストでは、%TheHole/uninitialized_OddballなどのSentinel valueを変数として追加することを検討し、他の潜在的なエクスプロイトを発見することをお勧めします。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-0e52075003a8ee2ca492a5fc9f35c36b)この種の問題が正式にセキュリティ問題と見なされるかどうかにかかわらず、これらはハッカーが完全に利用するための期間を大幅に短縮します。我々はChromeなどのソフトウェアのセキュリティを向上させるために、この分野に継続的に注目し研究する必要があります。! [独占公開バイパス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)
Chrome V8エンジンのSentinel Valueのセキュリティリスクの詳細な分析
Chrome V8エンジンにおけるセンティネル値の安全性への影響を深く探る
Sentinel valueはアルゴリズムにおける特別な値で、ループや再帰アルゴリズムの終了条件によく使用されます。ChromeのソースコードにはさまざまなSentinel valueが存在します。以前の研究では、TheHoleオブジェクトを漏洩させることでChromeサンドボックス内で任意のコード実行が可能になることが示されました。Googleチームはその後、関連する脆弱性を修正しました。
しかし、V8にはJavaScriptに漏洩すべきではない他のネイティブオブジェクトも存在します。本稿では、Uninitialized Oddballオブジェクトについて論じます。この回避方法は、Issue1352549で最初に登場しました。注目すべきは、この方法が現在の最新V8バージョンでもまだ利用可能であり、まだ修正されていないことです。
この方法は一定の汎用性を持っています:
Issue1216437(CVE-2021-30551)では、内部の初期化されていないオッドボールのpocを初めて公開しました。
UninitializedOddballは、Issue1314616(CVE-2022-1486)でも直接リークされました。
3.Issue1352549(NoCVE)の影響は注目に値します。
これらのケースは、PatchGapの影響を受ける可能性のあるソフトウェアを再評価する必要があることを示しています。現在、Skypeはまだこの脆弱性を修正していません。
V8のほとんどのネイティブオブジェクトはv8/src/roots/roots.hファイルで定義されており、メモリ内で隣接して配置されています。これらの漏洩してはいけないネイティブオブジェクトがJavaScriptに漏洩すると、サンドボックス内で任意のコード実行が可能になることがあります。
この方法を検証するために、V8のネイティブ関数を修正し、Uninitialized OddballをJavaScriptに漏洩させることができます。具体的には、%TheHole()関数内のisolateに対するオフセットを修正し、Uninitialized Oddballを返すようにします。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
この方法を利用すると、HardenType保護を回避し、相対的に任意の読み書きが可能になります。最適化されたJavaScriptコードを分析すると、obj.propをチェックする際に、obj.propをキーとするValueの検証が行われず、直接JavaScriptの意味に従ってオフセットを計算し、配列の値を取得しているため、型の混乱が生じています。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
uninitialized_oddballがV8メモリ内で前方にソートされ、TheHoleオブジェクトよりも偽造が容易であるため、TheHoleに関連する緩和策が修正された後、この方法は回避の選択肢となった。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
最適化された関数が配列要素を返す際に、配列のmapをチェックして、オフセットを直接計算して値を返さないようにすることをお勧めします。
注意すべきは、Skypeが現在もこの脆弱性を修正していないことです。x86システムでは、アドレス圧縮がないため、任意の読み書きはプロセス全体に対して相対的です。SkypeはASLRを有効にしていますが、ファイルが大きいため、ハッカーは固定アドレスへの読み書きを行うだけで、Skypeファイルの内容にアクセスできる可能性が非常に高くなります。これにより、完全なエクスプロイトチェーンを完成させる難易度が大幅に低下します。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
今回のPatchGapはIssue1352549だけでなく、新しいバイパス方法の公開により、Issue1314616やIssue1216437などの脆弱性の悪用の難易度が大幅に低下しました。ハッカーは、以前のuninitialized_oddballの漏洩に関する脆弱性を完全に利用するために、ほとんど追加の研究を行う必要がありません。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
V8には他にもさまざまなSentinel valueが存在し、同様のセキュリティリスクがある可能性があります。fuzzテストでは、%TheHole/uninitialized_OddballなどのSentinel valueを変数として追加することを検討し、他の潜在的なエクスプロイトを発見することをお勧めします。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
この種の問題が正式にセキュリティ問題と見なされるかどうかにかかわらず、これらはハッカーが完全に利用するための期間を大幅に短縮します。我々はChromeなどのソフトウェアのセキュリティを向上させるために、この分野に継続的に注目し研究する必要があります。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value