
CVE-2022-24494
この脆弱性は任意のメモリ読み取りです。根本原因は、ユーザーランドから提供されたメモリアドレスの検証が欠如しており、そのアドレスが memcpy 操作で使用されてプールメモリにデータをコピーすることにあります。 チェックの欠如はアドレス Afd!AfdTliIoControl+0x40B にあります。

上のスクリーンショットの通り、ユーザーランドのメモリアドレスは InputBuffer+0x20 から一度目は MmUserProbeAddress で適切にチェックされ、アドレスがユーザーランドのメモリ空間内にあることを確認してコピーされます。しかし、二度目は同じメモリアドレスが InputBuffer+0x20 から RAX レジスタにコピーされますが、このときは MmUSerProbeAddress を使用したメモリアドレスのチェックが適切に行われません。この検証の欠如により、任意のカーネルアドレスを提供することが可能になります。 このアドレスは後ほど memcpy 操作によってプールメモリ割り当て(タグ:AfdL)にコピーされます。以下 AfdTliIoControl+0x5AB で確認できます。

以下の PoC は、ユーザーランドから提供されたカーネルアドレス (0xffffffdeadbeef01) を示しています。

ドライバーはこの無効なメモリアドレスから読み取りを試み、BSOD を引き起こします。

memcpy 操作で dst ポインタにコピーされた値は、後ほど tcpip.sys ドライバーに渡されます。どの内部オブジェクトが影響を受けるか、またユーザーランドから API を呼び出してこれらの潜在的な内部オブジェクトからデータを取得しメモリを漏洩できるかどうかについては、調査していません。
Microsoft は数か月後に、この種の脆弱性(任意のメモリ読み取り)が EoP に与える潜在的な影響について述べた調査レポートを公開しました。
https://msrc-blog.microsoft.com/2022/03/22/exploring-a-new-class-of-kernel-exploit-primitive/