CVE-2022-24481-POC
TL;DR
이 PoC는 exp(SHA1:fec933b0c46366a1fb272bfaf82a8262597a8d75)에서 역분석되었으며, 많은 AV 엔진이 이를 CVE-2022-24521로 탐지했습니다. 분석 결과, 이는 CVE-2022-24481용 exp일 가능성이 있습니다. 이유는 CVE-2022-24521이 타입 혼란 취약점이 아니기 때문입니다.
버그는 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를 호출하여 트리거합니다.