CVE-2022-24481-POC
TL;DR
このPoCは、exp(SHA1:fec933b0c46366a1fb272bfaf82a8262597a8d75)からリバースエンジニアリングしたものです。多くのAVエンジンはこれをCVE-2022-24521として検出しましたが、解析したところ、CVE-2022-24521は型混乱の脆弱性ではないため、これはCVE-2022-24481のエクスプロイト(exp)である可能性が高いと判断しました。
このバグは、CLFS_CONTAINER_CONTEXT.pContainer ポインタが不正であることが原因です。このポインタは CClfsContainer::Close 関数内で呼び出されるため、事前に改変されていると任意のコードが実行されます。では、このポインタをどのように改変するのでしょうか?
exp(fec933b0c46366a1fb272bfaf82a8262597a8d75) のRCA(根本原因分析)は以下のとおりです。
- exp は、CLFS_BASE_RECORD_HEADER.rgClients を CLFS_CONTAINER_CONTEXT のオフセットに変更します。
- CClfsLogFcbPhysical::Initialize 関数内で、CLFS_BASE_RECORD_HEADER.rgClients(CLFS_CONTAINER_CONTEXT のオフセット)から値を読み取り、メモリへ格納します。
- CClfsBaseFilePersisted::LoadContainerQ は、Container クラスのポインタを生成し、CLFS_CONTAINER_CONTEXT.pContainer に書き込みます。
- CClfsRequest::Cleanup 関数内で、手順2の値を、メモリ上でコンテナコンテキストと同一であるクライアントコンテキストに書き込みます。
- CClfsRequest::Close 関数内で、CLFS_CONTAINER_CONTEXT を解析して pContainer を呼び出します(トリガー)。