
CVE-2026-98432를 위한 Rust 탐지기 및 로컬 랩으로, inet_opt/ireq_opt에서 발생하는 Linux IPv4 TCP use-after-free 취약점을 다룹니다. 정적 ELF 분석, kprobe 도달 가능성 검사, 레이스 트리거를 제공합니다.
inet_opt / ireq_opt)일반 IPv4 TCP 리스너에서 도달 가능한 Linux 커널 use-after-free에 대한 연구용 PoC 및 로컬 랩입니다. 이것은 버그 탐지기/트리거이며, 익스플로잇이 아닙니다.
7.0.0-38-generic)에서 해당 코드 경로는 취약합니다:
inet_sock_destruct()와 tcp_v4_reqsk_destructor()가 옵션을
kfree_rcu() 대신 kfree()로 해제합니다.kfree 경로는 런타임에 도달 가능합니다(kprobes).free -> use 이벤트(via=reqsk)를 관찰했지만, 이를 안정적으로 재현하지는
못했습니다.tcp2kaslr 참조
저장소 역시 버그 트리거 단계에서 멈추며, 이후 단계는 공개되지 않았습니다.CONFIG_KASAN이 꺼져 있고 KFENCE 샘플링이 비활성화되어 있습니다.tcp2kaslr에서 발췌)MPTCP는 필요하지 않습니다. 입증된 경로는 일반 IPv4 TCP입니다:
ireq_opt)에 해당 옵션을 저장합니다.accept()하고 SO_LINGER(0)을 설정한 뒤 닫습니다.
inet_sock_destruct()가 옵션을 kfree()로 해제합니다.이전 트리거는 두 가지 점에서 잘못되었습니다: victim이 자식 소켓을 accept/close하지
않았고(free_sock=0), 서버 close에 의존하지 않고 RST를 전송했습니다.
현재 코드는 올바른 요소들을 추가합니다:
listen --accept-close — accept + SO_LINGER(0) + close.--sync — ACK + 중복 SYN 동시 전송, RST 없음, Record Route 옵션 사용.업스트림 수정은 정확히 다음과 같습니다:
- kfree(rcu_dereference_protected(inet->inet_opt, 1));
+ kfree_rcu(rcu_dereference_protected(inet->inet_opt, 1), rcu);
tcp_v4_reqsk_destructor()의 동일한 변경 사항입니다.
| 경로 | 설명 |
|---|---|
rust-poc/ | 네이티브 Rust PoC: 정적 ELF 분석, kprobes, 트리거 모드 |
lab/ | 기존 로컬 테스트용 Alpine + PHP 루프백 피해자 |
scripts/ | 로컬 재현 도우미, 승인된 감사 도우미 |
docs/FINDINGS.md | 테스트한 내용, 확인된 내용, 확인되지 않은 내용 |
docs/EXPLOITATION-NOTES.md | 범위: 버그 트리거만 해당, RCE 없음 |
docs/evidence/ | 정제된 샘플 증거 |
cd rust-poc
cargo build --release
# static analysis (no root)
./target/release/cve-2026-98432 static
# runtime reachability (root, tracefs)
sudo ./target/release/cve-2026-98432 runtime
# correct local vector: accept+close server + --sync trigger
cd ..
PASSES=1 ./scripts/repro-sync.sh 8083
repro-sync.sh는 127.0.0.1:8083에서 --accept-close 희생자를 시작하고, sudo로 동기화 트리거를 실행한 뒤 free_sock, use_build 및 UAF 판정을 출력합니다. 깨끗한 실행이 안전성의 증거는 아닙니다: 발생률은 시도당 대략 1e-7이며 이벤트가 군집화됩니다.
artifacts/가 없으면 static/runtime은 /boot로 대체됩니다. 레거시 scripts/cve-2026-98432.sh --static이 커널 아티팩트를 생성할 수 있습니다.
KASAN을 사용하면 커널은 inet_csk_route_req / ip_options_build에서 slab-use-after-free를 보고하며, 해제 스택은 inet_sock_destruct / inet_release에 있습니다. tcp2kaslr 하네스는 KASAN과 함께 약 134k회 시도에서 이에 도달합니다. 일반 커널에서는 동일한 경쟁 조건이 약 48M회 시도 중 단 두 번만 관찰되었습니다.
소유하거나 명시적으로 테스트 권한을 부여받은 커널과 호스트만 테스트하십시오. 이 트리거는 커널 경쟁 조건이며 호스트를 충돌시킬 수 있습니다. 스냅샷이 있는 일회용 VM을 사용하십시오.
offline-ant/tcp2kaslr — 버그 트리거, KASAN 증거, 분석:
https://github.com/offline-ant/tcp2kaslripv4: free inet_opt and ireq_opt after an RCU grace period
(Eric Dumazet), net/ipv4/af_inet.c 및 net/ipv4/tcp_ipv4.c에서 kfree → kfree_rcu.MIT. LICENSE를 참조하십시오.