
RPCライブラリにおけるリモートコード実行エクスプロイト
CVE-2022-26809 - Windows の中核コンポーネント(RPC)の脆弱性で、CVSS スコア 9.8 を獲得しましたが、これには理由があります。この攻撃は認証を必要とせず、ネットワーク経由でリモートから実行でき、RPC ランタイムをホストするプロセスに依存する RPC サービスの権限で、リモートコード実行(RCE)につながる可能性があります。この重大なバグは、運が良ければ、パッチ未適用で SMB を実行している Windows ホストへのアクセスを獲得できます。この脆弱性は、ネットワークを侵害するために外部から悪用されるだけでなく、ネットワーク内のマシン間でも悪用される可能性があります。
CVE によると、この脆弱性は Windows RPC ランタイム内に存在し、rpcrt4.dll というライブラリに実装されています。このランタイムライブラリは、RPC プロトコルを使用して通信するクライアントプロセスとサーバープロセスの両方に読み込まれます。バージョン 10.0.22000.434(3月)と 10.0.22000.613(パッチ適用済み)を比較し、変更点のリストを洗い出しました。
OSF_SCALL::ProcessResponse 関数と OSF_CCALL::ProcessReceivedPDU 関数は性質が似ています。どちらも RPC パケットを処理しますが、一方はサーバー側、もう一方はクライアント側で実行されます(SCALL と CCALL)。OSF_SCALL::ProcessReceivedPDU を差分比較したところ、新しいバージョンに追加された 2 つのコードブロックがあることに気づきました。


パッチ適用後のコードを見ると、QUEUE::PutOnQueue の後に新しい関数が呼び出されていることがわかりました。この新しい関数を詳しく調べ、そのコードを掘り下げたところ、整数オーバーフローをチェックしていることがわかりました。言い換えると、パッチで追加された新しい関数は、整数変数が想定された値の範囲内に収まることを検証するために追加されたものです。

OSF_SCALL:GetCoalescedBuffer 内の脆弱なコードをさらに掘り下げたところ、整数オーバーフローのバグがヒープバッファオーバーフローにつながる可能性があることに気づきました。そこでは、データが、それを格納するには小さすぎるバッファにコピーされます。これにより、データがバッファの境界外、つまりヒープ上に書き出されることが可能になります。悪用されると、このプリミティブはリモートコード実行につながります!
整数オーバーフローをチェックする同様の呼び出しが、他の関数にも追加されました:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
整数オーバーフローの脆弱性とそれを防ぐ関数は、クライアント側とサーバー側の両方の実行フローに存在します。
まだ開発中で、時期は未定です。