# Chrome V8 エンジンの Sentinel Value の脆弱性を解決しますSentinel valueはアルゴリズムにおける特別な値で、通常はループまたは再帰の終了条件として使用されます。Chrome V8エンジンには複数のSentinel valueが存在し、JavaScript環境に漏洩するとサンドボックスの脱出を引き起こす可能性があります。本記事では、初期化されていないOddballオブジェクトの漏洩を通じて、Chrome V8のHardenProtect保護メカニズムを回避する方法を探ります。## V8のセンチネル値V8のソースコードでは、複数のネイティブオブジェクトが定義されており、それらはメモリ内に隣接して配置されています。これらのオブジェクトがJavaScriptに漏洩すると、サンドボックス内で任意のコードが実行される可能性があります。以前の研究では、TheHoleオブジェクトの漏洩がこれを実現できることが示されていますが、この記事で議論されているUninitialized Oddballオブジェクトも同様のリスクを抱えています。私たちは、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 オブジェクトを利用することで、V8 の HardenType 保護を回避し、相対的な任意の読み書きを実現できます。重要なのは、最適化された JavaScript コードが配列要素のタイプをチェックせず、JavaScript のセマンティクスに従ってオフセットを計算し数値を読み取るため、タイプの混乱が生じることです。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value](https://img-cdn.gateio.im/social/moments-26c26345e3ec4effeea2e3e6b7cd8772)x86アーキテクチャでは、アドレス圧縮がないため、任意の読み書きはプロセス全体に対して行われます。これは、Skype(のような特定のソフトウェアにおいて、攻撃者が特定のメモリ領域を読み書きすることを利用し、全体の脆弱性利用チェーンを完成させることができることを意味します。! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value])https://img-cdn.gateio.im/social/moments-4c091ca0e153e953eb168e99762ff7cc(## セキュリティへの影響この脆弱性の利用方法の公開により、類似の脆弱性を利用する難易度が大幅に低下しました。攻撃者は追加の研究なしに完全な利用を実現できるため、修正されていない多くのソフトウェアに対して脅威をもたらします。さらに、V8 には他の Sentinel 値も存在し、同様の問題を引き起こす可能性があります。これは私たちに次のことを示唆しています:1. 他の Sentinel 値の漏洩も V8 のリモートコード実行を簡単に実現できるのか?2. このような問題を正式にセキュリティ脆弱性としてリストアップすべきですか?3. ファジングテストでは、さまざまなセントネル値を変数としてテスト範囲に含めるべきでしょうか?いずれにせよ、この種の問題は攻撃者が完全な利用を実現するサイクルを大幅に短縮するため、安全研究者や開発者が高度に注目すべきです。! [独占公開バイパス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(! [独占公開バイパス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脆弱性の詳細:未初期化のOddballオブジェクトの漏洩とサンドボックスの脱出
Chrome V8 エンジンの Sentinel Value の脆弱性を解決します
Sentinel valueはアルゴリズムにおける特別な値で、通常はループまたは再帰の終了条件として使用されます。Chrome V8エンジンには複数のSentinel valueが存在し、JavaScript環境に漏洩するとサンドボックスの脱出を引き起こす可能性があります。本記事では、初期化されていないOddballオブジェクトの漏洩を通じて、Chrome V8のHardenProtect保護メカニズムを回避する方法を探ります。
V8のセンチネル値
V8のソースコードでは、複数のネイティブオブジェクトが定義されており、それらはメモリ内に隣接して配置されています。これらのオブジェクトがJavaScriptに漏洩すると、サンドボックス内で任意のコードが実行される可能性があります。以前の研究では、TheHoleオブジェクトの漏洩がこれを実現できることが示されていますが、この記事で議論されているUninitialized Oddballオブジェクトも同様のリスクを抱えています。
私たちは、V8のネイティブ関数を変更することによって、Uninitialized OddballをJavaScriptに漏洩させて検証することができます。具体的には、%TheHole()関数内のisolateに対するオフセットを変更し、それがUninitialized Oddballオブジェクトを返すようにします。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
HardenType保護のバイパス
Uninitialized Oddball オブジェクトを利用することで、V8 の HardenType 保護を回避し、相対的な任意の読み書きを実現できます。重要なのは、最適化された JavaScript コードが配列要素のタイプをチェックせず、JavaScript のセマンティクスに従ってオフセットを計算し数値を読み取るため、タイプの混乱が生じることです。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
x86アーキテクチャでは、アドレス圧縮がないため、任意の読み書きはプロセス全体に対して行われます。これは、Skype(のような特定のソフトウェアにおいて、攻撃者が特定のメモリ領域を読み書きすることを利用し、全体の脆弱性利用チェーンを完成させることができることを意味します。
! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
セキュリティへの影響
この脆弱性の利用方法の公開により、類似の脆弱性を利用する難易度が大幅に低下しました。攻撃者は追加の研究なしに完全な利用を実現できるため、修正されていない多くのソフトウェアに対して脅威をもたらします。
さらに、V8 には他の Sentinel 値も存在し、同様の問題を引き起こす可能性があります。これは私たちに次のことを示唆しています:
他の Sentinel 値の漏洩も V8 のリモートコード実行を簡単に実現できるのか?
このような問題を正式にセキュリティ脆弱性としてリストアップすべきですか?
ファジングテストでは、さまざまなセントネル値を変数としてテスト範囲に含めるべきでしょうか?
いずれにせよ、この種の問題は攻撃者が完全な利用を実現するサイクルを大幅に短縮するため、安全研究者や開発者が高度に注目すべきです。
! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(
! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-ed89289bebf59d4b27f5bffb5511a8c5.webp(
! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-0e52075003a8ee2ca492a5fc9f35c36b.webp(
! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-230537e420d579aabd89bdd168b20878.webp(
! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-506159c94c9e0988552cbcbd13d971e1.webp(
! [独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(