##
Этот PoC реверс-инжинирингован из эксплойта (SHA1:fec933b0c46366a1fb272bfaf82a8262597a8d75) и многие антивирусные движки определили его как CVE-2022-24521. После анализа я обнаружил, что это, возможно, эксплойт для CVE-2022-24481, поскольку CVE-2022-24521 не является уязвимостью путаницы типов. Ошибка вызвана некорректностью указателя CLFS_CONTAINER_CONTEXT.pContainer, который будет вызван в функции CClfsContainer::Close, поэтому если он был изменён ранее, это приведёт к выполнению произвольного кода. Но как изменить этот указатель? Анализ первопричины эксплойта (fec933b0c46366a1fb272bfaf82a8262597a8d75) выглядит следующим образом:
1. Эксплойт модифицирует CLFS_BASE_RECORD_HEADER.rgClients на смещение CLFS_CONTAINER_CONTEXT.
2. В функции CClfsLogFcbPhysical::Initialize из CLFS_BASE_RECORD_HEADER.rgClients (смещение CLFS_CONTAINER_CONTEXT) считывается некоторое значение в память.
3. CClfsBaseFilePersisted::LoadContainerQ генерирует указатель на класс Container и заполняет CLFS_CONTAINER_CONTEXT.pContainer.
4. В функции CClfsRequest::Cleanup значение из шага 2 записывается в контекст клиента, который в памяти совпадает с контекстом контейнера.
5. В функции CClfsRequest::Close выполняется разбор CLFS_CONTAINER_CONTEXT и вызов pContainer (триггер).
The full story
This article is one source in a clustered incident — the cluster page carries the summary, timeline and every other outlet covering it.
