Avast 안티바이러스 커널 드라이버 이중 Fetch 취약점 완전 분석
원제 CVE-2025-13032: Entering and Breaking the Avast Antivirus Sandbox Part 2
106 포인트댓글 27

Key Point
Avast 같은 주요 보안 소프트웨어의 커널 드라이버 취약점이 Windows 권한 상승까지 연쇄되는 과정을 보안 연구자들이 공개하며, 엔드포인트 보안 솔루션의 신뢰도 문제와 커널 드라이버 개발 시 이중 fetch 같은 기초적 문제의 위험성을 드러낸다.
핵심 요약
- Avast 커널 드라이버의 CVE-2025-13032 이중 Fetch 취약점을 이용해 Windows 11에서 완전한 권한 상승 공격을 수행하는 방법을 상세히 기술한다.
- 취약점은 UNICODE_STRING 구조체의 Length 필드를 여러 번 읽으면서 발생하며, 첫 번째 읽기로 버퍼를 할당하고 두 번째 읽기로 데이터를 복사할 때 사이즈가 변경되면 Paged Pool 오버플로우가 발생한다.
- 공격자는 두 번째 스레드에서 Length 값을 계속 토글해 타이밍을 맞춰 오버플로우를 안정적으로 트리거할 수 있다.
- I/O Ring 객체의 RegBuffers 배열을 손상시켜 임의 읽기/쓰기 원시값(primitive)을 얻는다. RegBuffers는 사용자 등록 버퍼의 포인터 배열이며, 손상된 포인터가 사용자 영역의 가짜 버퍼 엔트리를 가리키도록 설정한다.
- Heap Spray 기법으로 오버플로우 버퍼가 RegBuffers 할당 근처에 배치될 확률을 높인다. 같은 크기 클래스의 할당을 대량으로 생성 후 일부를 해제해 구멍을 만든다.
- MDL(Memory Descriptor List)을 이용해 커널 주소를 유출한다. I/O Ring 작업 시 커널이 생성한 MDL은 프로세스의 EPROCESS 구조체 포인터를 포함하므로, 손상된 버퍼 엔트리의 MDL 필드를 읽어 EPROCESS 주소를 얻는다.
- 오버플로우로 손상된 pool chunk의 ProcessBilled 필드를 복구하지 않으면 시스템이 Crash되므로, ExPoolQuotaCookie 값을 역산해 올바른 값으로 덮어쓴다.
- RegBuffers 등록 해제 시 남겨진 커널의 버퍼 엔트리 참조와 사용자 영역 포인터 해제를 방지하기 위해 참조 횟수를 증가시킨다.
- 획득한 임의 읽기/쓰기 원시값과 EPROCESS 주소로 EPROCESS 더블 링크드 리스트를 순회해 SYSTEM 프로세스를 찾고 그 Token 필드를 읽은 후, 자신의 EPROCESS Token을 덮어써 SYSTEM 권한을 획득한다.
- CVE-2025-13032는 이후 패치되었으며, 모든 사용자에게 최신 버전의 Avast 업데이트를 권장한다.