# Chrome V8エンジンにおけるSentinel Value漏洩によるセキュリティリスクの探求## イントロダクションセンチネル値はアルゴリズムにおける特別な値であり、通常はループまたは再帰アルゴリズムの終了条件として使用されます。Chromeのソースコードではこの特別な値が広く使用されています。最近、研究者たちはTheHoleオブジェクトの漏洩を通じてCVE-2021-38003およびCVE-2022-1364のサンドボックス内での任意コード実行を実現しました。Googleチームはその後、これら2つの脆弱性を迅速に修正しました。しかし、TheHoleオブジェクトを除いて、V8にはJavaScriptに漏洩すべきではない他のネイティブオブジェクトも存在します。本稿では、Uninitialized Oddballオブジェクトに焦点を当て、V8のHardenProtectメカニズムを回避する方法について説明します。注意すべきは、この回避方法は現在の最新版V8にも適用可能であり、まだ修正されていないということです。## V8のセンチネル値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保護のバイパスUninitialized Oddballオブジェクトを利用することで、相対的な任意の読み書きが実現できます。最適化されたJavaScriptコードでは、read関数はobj.propをキーとしたValueをチェックせず、JavaScriptのセマンティクスに従ってオフセットを直接計算し、配列の値を取得します。これにより、計算時に型の混乱が発生し、任意の読み取りが実現されます。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-26c26345e3ec4effeea2e3e6b7cd8772)任意の書き込み操作については、Issue1352549に記載されている構造方法を参照して分析できます。推奨される修正案は、最適化された関数が配列要素を返す際に、配列のマッピングをチェックし、オフセットを直接計算して配列の値を返すのを避けることです。! [独占公開バイパス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)## PatchGapの警告Issue1352549を分析したところ、一部のソフトウェアにPatchGapの問題が存在する可能性があることがわかりました。注目すべきは、現時点でSkypeはまだこの脆弱性を修正していないことです。x86環境では、任意の読み書きの実装が異なる場合があります。なぜなら、アドレス圧縮がないため、プロセス全体に対して直接操作できるからです。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-0e52075003a8ee2ca492a5fc9f35c36b)今回のPatchGapの問題は、Issue1352549だけでなく、新しい回避策の公開により、Issue1314616やIssue1216437などの脆弱性を利用する難易度が大幅に低下しました。ハッカーはほとんど研究コストをかけずに、以前のuninitialized_oddball脆弱性の完全な利用を達成することができます。! [独占公開バイパス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)## まとめこの記事では、Sentinel value内のuninitialized_Oddballを漏洩させることで任意の読み取り原子操作を実現する方法について簡単に説明します。V8には他にも多くのSentinel valueが存在し、同様のセキュリティ問題を引き起こす可能性があります。これから私たちが得られる示唆は次の通りです:1. 他のuninitialized_Oddballリークは、V8でリモートコード実行を簡単に実装できますか?2. この種の問題が正式なセキュリティ問題と見なされるべきかどうかは、依然として議論の余地があります。3. ファザーに %TheHole/uninitialized_Oddball などの Sentinel 値を変数として追加して、他のエクスプロイト プリミティブをマイニングすることを検討してください。この種の問題が正式にセキュリティ問題と見なされるかどうかにかかわらず、それらはハッカーが完全な利用を実現するサイクルを大幅に短縮する。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-e9e2000fd501b69ee3ee643a459a26dd)
Chrome V8エンジンのSentinel Value漏洩の調査とセキュリティリスク分析
Chrome V8エンジンにおけるSentinel Value漏洩によるセキュリティリスクの探求
イントロダクション
センチネル値はアルゴリズムにおける特別な値であり、通常はループまたは再帰アルゴリズムの終了条件として使用されます。Chromeのソースコードではこの特別な値が広く使用されています。最近、研究者たちはTheHoleオブジェクトの漏洩を通じてCVE-2021-38003およびCVE-2022-1364のサンドボックス内での任意コード実行を実現しました。Googleチームはその後、これら2つの脆弱性を迅速に修正しました。
しかし、TheHoleオブジェクトを除いて、V8にはJavaScriptに漏洩すべきではない他のネイティブオブジェクトも存在します。本稿では、Uninitialized Oddballオブジェクトに焦点を当て、V8のHardenProtectメカニズムを回避する方法について説明します。注意すべきは、この回避方法は現在の最新版V8にも適用可能であり、まだ修正されていないということです。
V8のセンチネル値
V8のほとんどのネイティブオブジェクトはv8/src/roots/roots.hファイルで定義されており、これらのオブジェクトはメモリ内で順次隣接して配置されています。これらのネイティブオブジェクトがJavaScriptに漏洩すべきでない場合、それが漏洩するとサンドボックス内で任意のコードが実行される可能性があります。
これを検証するために、V8のネイティブ関数を変更して、Uninitialized OddballをJavaScriptに漏洩させることができます。具体的には、%TheHole()関数におけるisolateに対するオフセットを変更して、Uninitialized Oddballを返すようにします。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
HardenType保護のバイパス
Uninitialized Oddballオブジェクトを利用することで、相対的な任意の読み書きが実現できます。最適化されたJavaScriptコードでは、read関数はobj.propをキーとしたValueをチェックせず、JavaScriptのセマンティクスに従ってオフセットを直接計算し、配列の値を取得します。これにより、計算時に型の混乱が発生し、任意の読み取りが実現されます。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
任意の書き込み操作については、Issue1352549に記載されている構造方法を参照して分析できます。推奨される修正案は、最適化された関数が配列要素を返す際に、配列のマッピングをチェックし、オフセットを直接計算して配列の値を返すのを避けることです。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
PatchGapの警告
Issue1352549を分析したところ、一部のソフトウェアにPatchGapの問題が存在する可能性があることがわかりました。注目すべきは、現時点でSkypeはまだこの脆弱性を修正していないことです。x86環境では、任意の読み書きの実装が異なる場合があります。なぜなら、アドレス圧縮がないため、プロセス全体に対して直接操作できるからです。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
今回のPatchGapの問題は、Issue1352549だけでなく、新しい回避策の公開により、Issue1314616やIssue1216437などの脆弱性を利用する難易度が大幅に低下しました。ハッカーはほとんど研究コストをかけずに、以前のuninitialized_oddball脆弱性の完全な利用を達成することができます。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
まとめ
この記事では、Sentinel value内のuninitialized_Oddballを漏洩させることで任意の読み取り原子操作を実現する方法について簡単に説明します。V8には他にも多くのSentinel valueが存在し、同様のセキュリティ問題を引き起こす可能性があります。これから私たちが得られる示唆は次の通りです:
他のuninitialized_Oddballリークは、V8でリモートコード実行を簡単に実装できますか?
この種の問題が正式なセキュリティ問題と見なされるべきかどうかは、依然として議論の余地があります。
ファザーに %TheHole/uninitialized_Oddball などの Sentinel 値を変数として追加して、他のエクスプロイト プリミティブをマイニングすることを検討してください。
この種の問題が正式にセキュリティ問題と見なされるかどうかにかかわらず、それらはハッカーが完全な利用を実現するサイクルを大幅に短縮する。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value