# マイクロソフトの0day脆弱性分析: Web3インフラに重大な脅威をもたらす可能性先月のマイクロソフトのセキュリティパッチには、悪用可能なwin32k特権昇格の脆弱性が含まれていました。この脆弱性は、初期のWindowsシステムにのみ存在し、Windows 11では発生しないようです。この種の脆弱性の悪用は古くから存在しています。本稿では、現在の新しい緩和策が改善され続けている状況の中で、攻撃者がどのようにしてこの脆弱性を引き続き悪用する可能性があるのかを分析します。私たちはWindows Server 2016環境で全体の分析プロセスを完了しました。0day脆弱性は、公開されておらず修正されていない脆弱性を指し、気づかれずに悪用される可能性があり、非常に破壊的です。今回発見された0day脆弱性はWindowsシステム層に存在し、ハッカーはこの脆弱性を利用してWindowsの完全な制御権を取得することができます。ハッカーに制御されたシステムは、個人情報の漏洩、システムのクラッシュ、データの喪失、財務的損失、マルウェアの埋め込みなどの結果を引き起こす可能性があります。Web3ユーザーにとって、秘密鍵が盗まれ、デジタル資産が移転される可能性があります。より広い範囲で見ると、この脆弱性はWeb2インフラストラクチャに基づいて運営される全体のWeb3エコシステムに影響を及ぼす可能性すらあります。! [Numen独占:Microsoft 0-day Vulnerability Can Knock Out Web3 Cards at the System + Physical Level](https://img-cdn.gateio.im/social/moments-11434ba86c20e2bce85872a19c94efb4)## パッチ分析パッチ分析の結果、問題はどうやらオブジェクトの参照カウントが1回多く処理されているだけのようです。win32kコードが古いため、以前のコードはウィンドウオブジェクトのみをロックし、ウィンドウオブジェクト内のメニューオブジェクトをロックしていなかったことを示す初期のソースコードのコメントを見つけることができました。ここでメニューオブジェクトは誤って参照されている可能性があります。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります](https://img-cdn.gateio.im/social/moments-af93482f98ed83fd92288d62674084ac)## エクスプロイトの概念実証 (PoC)私たちは、xxxEnableMenuItem()に渡されたメニューが通常上位関数でロックされていることを発見しました。さらに分析したところ、xxxEnableMenuItemのMenuItemState関数が返すメニューには2つの可能性があることが分かりました: ウィンドウのメインメニュー、またはメニュー内のサブメニュー(、さらにはサブサブメニュー)です。PoCでは、特別な4層メニュー構造を構築し、各階層のメニューに特定の属性を設定して、xxxEnableMenuItem関数内の検出と判断を行います。重要なステップには、特定のメニュー参照関係を削除し、xxxRedrawTitleがユーザー層を返す際に特定のメニューオブジェクトを解放することが含まれます。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます](https://img-cdn.gateio.im/social/moments-171ea7cb7c6f7190c3f49a2b914eed04)## エクスプロイト(Exp)実装 ### 全体的な考え方私たちは主に2つの利用方向を考慮しました: shellcodeの実行、および読み書き原語を使用してトークンアドレスを変更すること。さまざまな要因を考慮して、後者を選択しました。全体のexpは、2つの重要な問題に分解できます:UAF脆弱性を利用してcbwndextraの値を制御する方法、およびcbwndextraの値を制御した後に安定した読み書きプリミティブを実現する方法。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります](https://img-cdn.gateio.im/social/moments-66af34ab04bec21e27be99bbe29c552a)### 初めてのデータ書き込みを実現私たちは、ウィンドウクラスWNDClassのウィンドウ名オブジェクトを使って、解放されたメニューオブジェクトを占有します。重要なのは、私たちが構築できるアドレス構造の中で、任意のデータを書き込むことができる位置を見つけることです。最終的に、私たちはxxxRedrawWindow関数のフラグビットAND 2操作を通じて書き込みを実現することを選びました。ウィンドウオブジェクトのcb-extraではなく、HWNDClassのcb-extraに書き込むことで、メモリレイアウトをより良く制御できるようにしました。! [Numen独占:Microsoftの0日の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます](https://img-cdn.gateio.im/social/moments-1cc94ddafacec491507491eef9195858)### 安定したメモリレイアウト私たちは、少なくとも3つの連続した0x250バイトのHWNDオブジェクトのメモリレイアウトを設計し、その中間の1つを解放して、0x250バイトのHWNDClassオブジェクトを占有します。前後のHWNDオブジェクトは、それぞれパラメータの検証と、読み書きの原子メディアとして使用されます。私たちは、メモリ内で漏洩したカーネルハンドルアドレスを通じて、要求されたウィンドウオブジェクトが期待通りに配置されているかどうかを正確に判断します。! [Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards at the System + Physical Level](https://img-cdn.gateio.im/social/moments-697c5814db02534f63b44c0d1d692f83)### 読み取り/書き込みプリミティブの変更私たちはGetMenuBarInfo()を使用して任意の読み取りを実現し、SetClassLongPtr()を使用して任意の書き込みを実現します。TOKENの書き込み操作の置き換えを除き、他の書き込みは最初のウィンドウオブジェクトのクラスオブジェクトを使用してオフセットによって完了します。! [Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックすることができます](https://img-cdn.gateio.im/social/moments-b0942592135ac96c6279544a62022329)## まとめ1. win32kの脆弱性は古くから存在しますが、マイクロソフトはRustを使用して関連するカーネルコードの再構築を試みています。将来の新しいシステムでは、このような脆弱性が排除される可能性があります。2. 今回の脆弱性利用プロセスは比較的簡単で、主な難点は最初の書き込みをどのように制御するかです。この脆弱性は依然としてデスクトップヒープハンドルアドレスの漏洩に依存しており、これは古いシステムにとって依然として安全上のリスクです。3. この脆弱性の発見は、より洗練されたコードカバレッジの検出によるものである可能性があります。4. 脆弱性の悪用検出については、脆弱性を引き起こす関数の重要なポイントに注目するだけでなく、異常なメモリレイアウトとウィンドウデータの読み書き操作を対象に検出する必要があります。! [Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards on the System + Physical Level](https://img-cdn.gateio.im/social/moments-b06b098af4f07260fdc03a75da160706)
0day脆弱性がWinシステムを脅かす可能性があり、Web3インフラの安全性に影響を与える可能性があります。
マイクロソフトの0day脆弱性分析: Web3インフラに重大な脅威をもたらす可能性
先月のマイクロソフトのセキュリティパッチには、悪用可能なwin32k特権昇格の脆弱性が含まれていました。この脆弱性は、初期のWindowsシステムにのみ存在し、Windows 11では発生しないようです。
この種の脆弱性の悪用は古くから存在しています。本稿では、現在の新しい緩和策が改善され続けている状況の中で、攻撃者がどのようにしてこの脆弱性を引き続き悪用する可能性があるのかを分析します。私たちはWindows Server 2016環境で全体の分析プロセスを完了しました。
0day脆弱性は、公開されておらず修正されていない脆弱性を指し、気づかれずに悪用される可能性があり、非常に破壊的です。今回発見された0day脆弱性はWindowsシステム層に存在し、ハッカーはこの脆弱性を利用してWindowsの完全な制御権を取得することができます。
ハッカーに制御されたシステムは、個人情報の漏洩、システムのクラッシュ、データの喪失、財務的損失、マルウェアの埋め込みなどの結果を引き起こす可能性があります。Web3ユーザーにとって、秘密鍵が盗まれ、デジタル資産が移転される可能性があります。より広い範囲で見ると、この脆弱性はWeb2インフラストラクチャに基づいて運営される全体のWeb3エコシステムに影響を及ぼす可能性すらあります。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Out Web3 Cards at the System + Physical Level
パッチ分析
パッチ分析の結果、問題はどうやらオブジェクトの参照カウントが1回多く処理されているだけのようです。win32kコードが古いため、以前のコードはウィンドウオブジェクトのみをロックし、ウィンドウオブジェクト内のメニューオブジェクトをロックしていなかったことを示す初期のソースコードのコメントを見つけることができました。ここでメニューオブジェクトは誤って参照されている可能性があります。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります
エクスプロイトの概念実証 (PoC)
私たちは、xxxEnableMenuItem()に渡されたメニューが通常上位関数でロックされていることを発見しました。さらに分析したところ、xxxEnableMenuItemのMenuItemState関数が返すメニューには2つの可能性があることが分かりました: ウィンドウのメインメニュー、またはメニュー内のサブメニュー(、さらにはサブサブメニュー)です。
PoCでは、特別な4層メニュー構造を構築し、各階層のメニューに特定の属性を設定して、xxxEnableMenuItem関数内の検出と判断を行います。重要なステップには、特定のメニュー参照関係を削除し、xxxRedrawTitleがユーザー層を返す際に特定のメニューオブジェクトを解放することが含まれます。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます
エクスプロイト(Exp)実装
全体的な考え方
私たちは主に2つの利用方向を考慮しました: shellcodeの実行、および読み書き原語を使用してトークンアドレスを変更すること。さまざまな要因を考慮して、後者を選択しました。
全体のexpは、2つの重要な問題に分解できます:UAF脆弱性を利用してcbwndextraの値を制御する方法、およびcbwndextraの値を制御した後に安定した読み書きプリミティブを実現する方法。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3ゲームをダウンさせる可能性があります
初めてのデータ書き込みを実現
私たちは、ウィンドウクラスWNDClassのウィンドウ名オブジェクトを使って、解放されたメニューオブジェクトを占有します。重要なのは、私たちが構築できるアドレス構造の中で、任意のデータを書き込むことができる位置を見つけることです。
最終的に、私たちはxxxRedrawWindow関数のフラグビットAND 2操作を通じて書き込みを実現することを選びました。ウィンドウオブジェクトのcb-extraではなく、HWNDClassのcb-extraに書き込むことで、メモリレイアウトをより良く制御できるようにしました。
! Numen独占:Microsoftの0日の脆弱性は、システム+物理レベルでWeb3カードをノックアウトすることができます
安定したメモリレイアウト
私たちは、少なくとも3つの連続した0x250バイトのHWNDオブジェクトのメモリレイアウトを設計し、その中間の1つを解放して、0x250バイトのHWNDClassオブジェクトを占有します。前後のHWNDオブジェクトは、それぞれパラメータの検証と、読み書きの原子メディアとして使用されます。
私たちは、メモリ内で漏洩したカーネルハンドルアドレスを通じて、要求されたウィンドウオブジェクトが期待通りに配置されているかどうかを正確に判断します。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards at the System + Physical Level
読み取り/書き込みプリミティブの変更
私たちはGetMenuBarInfo()を使用して任意の読み取りを実現し、SetClassLongPtr()を使用して任意の書き込みを実現します。TOKENの書き込み操作の置き換えを除き、他の書き込みは最初のウィンドウオブジェクトのクラスオブジェクトを使用してオフセットによって完了します。
! Numen独占:Microsoftの0日間の脆弱性は、システム+物理レベルでWeb3カードをノックすることができます
まとめ
win32kの脆弱性は古くから存在しますが、マイクロソフトはRustを使用して関連するカーネルコードの再構築を試みています。将来の新しいシステムでは、このような脆弱性が排除される可能性があります。
今回の脆弱性利用プロセスは比較的簡単で、主な難点は最初の書き込みをどのように制御するかです。この脆弱性は依然としてデスクトップヒープハンドルアドレスの漏洩に依存しており、これは古いシステムにとって依然として安全上のリスクです。
この脆弱性の発見は、より洗練されたコードカバレッジの検出によるものである可能性があります。
脆弱性の悪用検出については、脆弱性を引き起こす関数の重要なポイントに注目するだけでなく、異常なメモリレイアウトとウィンドウデータの読み書き操作を対象に検出する必要があります。
! Numen独占:Microsoft 0-day Vulnerability Can Knock Web3 Cards on the System + Physical Level