This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
V8 Sentinel の値漏洩の脆弱性: 新しい Chrome サンドボックス エスケープ方法の分析
Chrome V8エンジンにおけるSentinel Valueのセキュリティリスクについての考察
Sentinel値はアルゴリズムにおける特別な値であり、通常はループまたは再帰アルゴリズムの終了条件として存在します。Chromeのソースコードには多くのSentinel値があります。最近の研究により、特定のSentinel値オブジェクトを漏洩させることで、Chromeサンドボックス内で任意のコード実行が可能になることが示されています。
この記事では、新しいSentinel valueオブジェクトであるUninitialized Oddballについて説明します。この回避方法は、ある脆弱性報告書に最初に登場し、セキュリティ研究者によって完全なコードが提供されました。注目すべきは、現在この方法は最新のV8でも依然として使用可能であり、修正されていないことです。
この方法は高い汎用性を持っています:
あるCVEの脆弱性において、最初のPoCは内部の初期化されていない異常なものを漏洩するものでした。
別のCVE脆弱性レポートでは、研究者がUninitializedOddballを直接漏洩させましたが、その時点での利用チェーンは不完全でしたが、すでにセキュリティ上の懸念が示されています。
最近の脆弱性報告では、完全な利用方法が示されています。
これらの事例は、この問題の普遍性と深刻さを示しています。現時点では、ある通信ソフトウェアはこの脆弱性を修正していません。
V8におけるセンティネル値の適用
V8ソースコードでは、多数のネイティブオブジェクトが定義されており、それらはメモリ内で順に隣接して配置されています。一度、漏洩してはいけないネイティブオブジェクトがJavaScriptに公開されると、サンドボックス内で任意のコードを実行される可能性があります。
この方法が最新のV8で有効であることを検証するために、V8のネイティブ関数を修正し、Uninitialized OddballをJavaScriptに漏らすことができます。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
HardenType保護のバイパス
私たちはコードを構築できます。ある関数がUninitializedOddballを返すときに、相対的に任意の読み取りを実現します。最適化されたアセンブリコードを分析すると、関数はオブジェクトの属性が正しいかどうかのみをチェックし、属性に対応する値はチェックしていないことがわかります。直接JavaScriptの意味論に従ってオフセットを計算し、配列要素を取得することで、型混乱が生じ、任意の読み取りが実現されます。
! 独占公開バイパス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
同様に、任意の書き込みも似たような方法で構築できます。最適化関数が配列要素を返す際に、配列のマップのチェックを追加し、オフセットの戻り値を直接計算するのを避けることをお勧めします。
セキュリティリスクの警告
分析によると、ある通信ソフトウェアは現在もこの脆弱性を修正していません。x86システムでは、アドレス圧縮が欠如しているため、任意の読み書きがプロセス全体に直接相対しています。ASLRが有効になっているにもかかわらず、ファイルが大きいため、重要な内容に読み書きされる可能性が依然として高いです。PE解析などの手法を組み合わせることで、短時間で完全なエクスプロイトチェーンを完成させることが可能です。
今回のセキュリティ上の脆弱性は、単一のバグにとどまらず、以前のいくつかの類似した脆弱性の悪用の難易度を大幅に低下させました。ハッカーは追加の研究をほとんど必要とせず、完全な悪用を実現でき、以前報告されたすべての類似脆弱性を含んでいます。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value
まとめ
この記事では、Uninitialized Oddballを利用した任意の読み取りを実現する方法について簡単に説明します。V8には他にも多くのSentinel値があり、同様のセキュリティリスクが存在する可能性があります。これは私たちにいくつかの示唆を与えます:
その他のSentinel値の漏洩もV8サンドボックスの脱出を引き起こす可能性がありますか?
このような問題は正式にセキュリティ脆弱性と見なされるべきですか?
FuzzテストにSentinel value関連の変数を追加する必要がありますか? より多くの潜在的な問題を発見するために?
いずれにせよ、この種の問題はハッカーが完全に利用するまでのサイクルを大幅に短縮する可能性があり、非常に重要です。
! 独占公開バイパスChrome v8 HardenProtect by Leaking Sentinel Value