未修正のRasManゼロデイにより、DoSクラッシュとRPCスプーフィングでLocal Systemの乗っ取りが可能に

Image

0patchチームは、Windowsのリモート アクセス接続マネージャー(RasMan)におけるCVE-2025-59230(Microsoftが2025年10月の更新で対処した欠陥)を分析する中で、特権のないユーザーアカウントからLocal Systemとしてローカルコード実行を可能にする実動するエクスプロイトを研究者が発見したと報告しました。しかし同時に、2つ目の問題も特定しました。エクスプロイトは、非特権ユーザーがRasManをクラッシュさせられる別の手法に依存しており、著者らによればこの脆弱性は未修正のままだということです。

CVE-2025-59230は概念的には単純です。RasManが起動すると、他のサービスが後から接続し暗黙に信頼するRPCエンドポイントを登録します。RasManが動作していない場合、管理者権限のないユーザーレベルのエクスプロイトを含むあらゆるプロセスが、先に同じRPCエンドポイントを登録でき、特権サービスがこの「偽装」エンドポイントに接続してしまいます。この誤った信頼は悪用され、最終的に攻撃者が制御するコード実行につながる指示を送り込むことが可能になります。

実用上の課題は悪用の成立にあります。RasManは通常Windowsとともに自動的に起動するため(著者らは、Windows 11では「手動」に設定されていてもシステム起動時に起動する場合があると指摘しています)、サービスが動作していない瞬間を捉えることはほぼ不可能です。悪意のあるスケジュールタスクであっても、先にRPCエンドポイントを登録するためにRasManより「先回り」することは現実的ではありません。

その結果、エクスプロイトには、目的のRPCエンドポイントを解放するためにRasManを停止させる手段も必要になります。この第2段階は、それ自体が脆弱性であることが判明しました。非特権ユーザーがRasManを強制的にクラッシュさせ、サービス拒否(DoS)状態を引き起こすことで、CVE-2025-59230を介した悪用への道を開いてしまいます。

クラッシュを調査した結果、0patchは原因を、循環リンクリストを走査するロジックの欠陥に突き止めました。コードは、現在の要素が最初の要素を指し戻したときにループを抜け、リスト全体の走査が完了したことを示します。ループ内には、一見もっともらしい現在ポインタに対するNULLチェックがあります。NULLでなければ値を読み取り、特定の条件下ではループが終了する可能性があります。

しかし、ポインタがNULLの場合でも実行は停止しません。代わりに、NULLをデリファレンスして次の要素にアクセスしようとするため、メモリアクセス違反が発生してRasManがクラッシュします。著者らは、この種のバグは実際の開発で容易に起こり得ると強調しています。関数は整形式の循環リストを前提としている一方、NULLチェックは防御的に追加されたものの、テスト中に一度も発火せず、誤った挙動が見えなくなっていた可能性があるということです。

公開情報で説明されているとおり、0patchのマイクロパッチは欠けていた分岐を追加します。NULLポインタが検出された場合、ループは走査を続けるのではなく終了するようになりました。デモでは、0patchを有効にしていない場合はエクスプロイトが確実にRasManをクラッシュさせる一方、エージェントが有効な場合はクラッシュが発生しなくなることが示されています(著者らは、動画では同様の名称のサービスであるRemote Access Auto Connection Managerが強調表示されていると注記しています)。

0patchによれば、マイクロパッチはすでにリリースされており、サポート対象のWindowsバージョンで利用可能です。最新のWindows 11およびWindows 10のビルドからWindows 7まで、さらにWindows Server 2025までを含む複数のサーバーエディションが対象で、システムが完全に最新の状態であることが条件です。

翻訳元: https://meterpreter.org/unpatched-rasman-zero-day-allows-local-system-takeover-via-dos-crash-and-rpc-spoofing/

ソース: meterpreter.org