
CVE-2026-64561용 PoC 익스플로잇으로, 호스트에서 커널 루트 코드 실행을 통해 게스트-투-호스트 탈출을 가능하게 하는 KVM/x86 섀도 MMU use-after-free 취약점입니다.

이 문서는 Hyunwoo Kim (@v4bel)이 발견하고 보고한 Zapscape (CVE-2026-64561) 취약점에 대해 설명합니다. 이 취약점은 KVM/x86 환경에서 게스트가 호스트로 탈출하여 호스트에서 커널(root) 권한으로 명령을 실행할 수 있게 하는 KVM 탈출 취약점입니다.
Zapscape는 KVM/x86의 shadow MMU 에뮬레이션에서 발생하는 use-after-free 취약점으로, 특히 shadow 페이지가 회수될 때 실행되는 재귀적 zap 경로에서 발생합니다. 게스트 측 작업만으로 버그를 트리거하여 호스트 커널의 shadow 페이지를 손상시킬 수 있으며, 신뢰할 수 없는 게스트를 수용하고 중첩 가상화를 노출하는 KVM/x86 호스트, 특히 멀티테넌트 x86 퍼블릭 클라우드의 게스트-호스트 격리를 위협할 수 있습니다.
자세한 기술 정보는 여기를 참조하세요.
[!NOTE] 이 취약점을 [email protected]에 보고한 후 합의된 엠바고가 종료되어, 익스플로잇이 oss-security에 게시되고 이 Zapscape 문서가 공개되었습니다. 공개 일정은 기술 상세 문서를 참조하세요.
PoC는 AMD를 대상으로 작성되었으며, 안전한 테스트를 위해 QEMU TCG에서 실행하는 것이 권장됩니다. PoC의 구조는 다음과 같습니다.
L0: Linux 7.1.3 + KVM_AMD on an x86_64 CPU (AMD SVM/NPT) emulated by QEMU TCG. The escape target
└─ L1: the guest poc creates. Switching long -> PAE aliases one shadow page as both child and pinned root, and L1 then escalates the UAF into L0 kernel code-exec
└─ L2: the guest L1 VMRUNs. Its memory touches trigger L0's quota reclaim -> recursive zap with no root_count guard -> UAF
이 PoC는 클라우드 환경에서 즉시 실행되는 무기화된 익스플로잇이 아니라, QEMU TCG 위에서 취약점과 전체 익스플로잇 체인을 재현하는 데모 코드입니다. 실제 클라우드 환경에서 사용하려면 PoC가 수행하는 L1 작업을 게스트 커널 모듈로 옮기고, 호스트 커널의 kconfig에 맞게 익스플로잇을 포팅해야 합니다. 이는 어려운 작업이 아닙니다.
# gcc -O2 -g -static -pthread poc.c -o poc
# ./qemu.sh bzImage initramfs.cpio.gz
/$$$$$$$$ /$$$$$$ /$$$$$$$
|_____ $$ /$$__ $$| $$__ $$
/$$/ | $$ \ $$| $$ \ $$
/$$/ | $$$$$$$$| $$$$$$$/
/$$/ | $$__ $$| $$____/
/$$/ | $$ | $$| $$
/$$$$$$$$| $$ | $$| $$
|________/|__/ |__/|__/
[+] /Zapscape created by the target KVM host kernel (owner uid=0, mode=0644).
[+] exploit completed - verify with: ls -la /Zapscape
zapscape(uid=65534)$ ls -la /Zapscape
-rw-r--r-- 1 root root 0 Jul 29 05:27 /Zapscape
zapscape(uid=65534)$
이 PoC는 정확한 정보를 제공하기 위한 것입니다. 테스트 권한이 없는 시스템에서는 사용하지 마십시오.
Zapscape (CVE-2026-64561)는 f95eec9bed76 (2020-07-08)부터 2abd5287f083 (2026-07-21)까지의 범위를 다룹니다.
Januscape (CVE-2026-53359)와 동일합니다:
/dev/kvm이 모든 사용자에게 쓰기 권한(0666)이 있으므로, 권한 없는 사용자도 이 취약점을 LPE로 사용하여 root 권한을 얻을 수 있습니다. LPE로 사용될 때는 호스트 측 VMM ioctl을 사용할 수 있으므로 익스플로잇이 더 쉽고 안정적입니다.동일한 shadow MMU에서 발생하지만, 다른 근본 원인을 가진 별개의 취약점입니다.
그렇지만 Januscape와 달리 Intel에서는 EPT 페이지 워크 길이 4와 5가 모두 L1에 노출된 경우에만 트리거할 수 있습니다. 이는 영향 범위를 평가할 때 중요한 지점이므로 정확히 이해해야 합니다. 기술 상세 문서를 참조하세요.
아니요. Januscape와 마찬가지로 커널 내부의 KVM에서 발생하므로 QEMU의 에뮬레이션과 무관하게 트리거됩니다. 그렇기 때문에 자체 가상화 스택을 구현하여 사용하는 대규모 퍼블릭 클라우드도 위협할 수 있습니다.
네. L1 커널 권한이 필요합니다. 퍼블릭 클라우드에서 인스턴스를 할당받으면 일반적으로 자신의 VM에서 root 권한을 가지므로 이 조건이 충족됩니다. 게스트 root가 없는 시나리오에서는 Dirty Frag와 같은 LPE와 연계해야 합니다.
네. 호스트 하이퍼바이저에 대한 지속 가능한 패치 프로세스를 구축하는 것을 권장합니다. 겨울이 다가오고 있습니다.
그렇지 않길 바랍니다.