
Linux 커널 nf_tables use-after-free 로컬 권한 상승 익스플로잇으로, CVE-2026-23111을 대상으로 하며 KASLR 우회, ROP 체인, modprobe_path 덮어쓰기를 포함합니다.
Linux 커널 nf_tables 서브시스템의 use-after-free 취약점인 CVE-2026-23111에 대한
동작하는 로컬 권한 상승 익스플로잇입니다. linux-6.12.69 (x86-64)에서 테스트되었습니다.
이 익스플로잇은 다음과 같이 빌드된 대상 커널을 가정합니다:
| 옵션 | 값 | 이유 |
|---|---|---|
CONFIG_NF_TABLES | y | 취약한 서브시스템 |
CONFIG_USER_NS | y | 비특권 상태에서 nf_tables 구동 (user+net 네임스페이스) |
CONFIG_RANDOMIZE_BASE | y | KASLR — 런타임에 우회됨 (Phase 1) |
CONFIG_MEMCG | y | 객체가 kmalloc-cg-* 캐시에 배치됨 (스프레이에서 가정) |
CONFIG_STATIC_USERMODEHELPER | n | modprobe_path가 쓰기 가능해야 함 |
SLAB_FREELIST_RANDOM / HARDENED | n | LIFO 프리리스트가 재점유를 안정적으로 유지 |
offsets.h의 오프셋은 특정 커널 빌드에 한정됩니다 — 다른 커널을 위해서는 재생성해야 합니다
| 파일 | 용도 |
|---|---|
exp.c | 익스플로잇 (Phase 1 → 4). |
rootme.c | 루트 셸을 획득하는 데 사용되는 작은 정적 setuid(0); execl("/bin/sh") 헬퍼. |
netlink_min.h | 최소한의 Netlink 정의 (musl 기반으로 빌드, 커널 uapi 헤더 없음). |
offsets.h | 대상 커널에 대한 kbase 기준 심볼/가젯 오프셋. |
gen_offsets.sh | 커널 System.map / vmlinux로부터 offsets.h를 재생성. |
Makefile | exp와 rootme를 정적 musl ELF로 빌드. |
musl-gcc가 필요합니다 (sudo apt install musl-tools).
make # builds exp + rootme (static ELFs)
make clean # remove built binaries
두 바이너리 모두 정적이므로 공유 라이브러리 없이 최소한의 busybox initramfs 내에서 실행됩니다.
exp는 대상의 /cve-2026-23111-poc/에서 자신 옆에 rootme가 있을 것으로 예상합니다.
offsets.h는 특정 빌드로부터 생성됩니다. 다른 vmlinux의 경우:
make offsets SYSTEM_MAP=/path/to/System.map
gen_offsets.sh는 심볼(single_start, modprobe_path, init_ipc_ns, msleep,
memcpy, …)과 ROP 가젯을 모두 커널 베이스로부터의 오프셋으로 추출합니다. 또한 커널이
6.12.x와 의미 있게 다를 경우 exp.c에 내장된 구조체 오프셋(nft_chain 레이아웃,
nft_expr_ops.validate, init_ipc_ns + 0x110, msg_queue.q_messages, xa_node.slots)을
pahole / 디스어셈블리로 재검증해야 합니다.
이 코드는 방어적 보안 연구 및 교육을 위해 공개되었습니다. 알려진 취약 커널을 실행하는 랩 VM을 대상으로 합니다. 소유하지 않았거나 테스트 권한이 없는 시스템에 사용하지 마십시오. 저자는 오용에 대해 어떠한 책임도 지지 않습니다.