
CVE-2026-98432 Linux TCP use-after-free를 위한 툴킷: 커널 패치 점검, race oracle 트리거링, pcap UAF 분석, KASLR 슬라이드 복구, nftables 강화.

윤리적 사용 전용 – 승인된 보안 테스트
이 저장소는 승인된 보안 전문가, 블루 팀, 침투 테스트 수행자만을 위한 도구를 제공합니다. 컴퓨터 시스템에 대한 무단 접근은 CFAA(미국), Computer Misuse Act(영국), TCK 243/244(터키) 및 전 세계의 유사 법률에 따라 불법입니다.

CVE-2026-98432는 Linux 커널의 IPv4 TCP 스택에서 발생하는 use-after-free 취약점입니다. IPv4 옵션을 포함한 수신 SYN 패킷이 도착하면 커널은 해당 옵션의 사본을 request socket에 저장합니다. 적절한 시점에 SYN이 재전송되면, 한 CPU가 해당 사본을 해제하는 동안 다른 CPU가 여전히 이를 읽어 SYN-ACK를 생성하게 되어 ip_options_build()에서 use-after-free가 발생합니다.
서버가 대기 중인 연결 요청을 소켓 간에 마이그레이션할 때(net.ipv4.tcp_migrate_req=1 또는 BPF_SK_REUSEPORT_SELECT_OR_MIGRATE 프로그램) 두 번째 트리거가 존재합니다. 두 트리거는 동일한 근본 원인을 공유합니다. inet_sock_destruct()와 tcp_v4_reqsk_destructor()가 RCU 유예 기간을 기다리지 않고 일반 kfree()로 옵션을 해제한다는 점입니다.
tcp_v4_save_options()가 수신된 IPv4 옵션(ireq_opt)을 request socket에 저장합니다.tcp_v4_syn_recv_sock()이 복사 없이 ireq_opt를 자식 소켓에 넘깁니다.inet_sock_destruct()가 일반 kfree()로 inet_opt를 해제합니다.tcp_v4_send_synack() → ip_options_build()에 도달하여 이미 해제된 옵션을 읽습니다.업스트림 수정은 커밋 e3f33b0a1d89("ipv4: free inet_opt and ireq_opt after an RCU grace period")이며, 두 해제를 모두 kfree_rcu()로 전환합니다. IPv6는 주요 문제의 영향을 받지 않습니다.
5.15.0-xxx 같은 배포판 버전을 업스트림 번호와 비교하지 마십시오. 벤더 자체의 보안 트래커를 확인하십시오.| 날짜 | 관찰 내용 | 출처 |
|---|---|---|
| 2026-11-04 | Ubuntu 22.04 LTS(및 이후 버전)는 여전히 수정 사항이 -proposed에만 있으며, 표준 -updates 사용자는 수정 사항이 승격될 때까지 취약한 커널을 사용하게 된다. 영향을 받는 릴리스에서는 MPTCP가 기본적으로 활성화되어 있지만, 이 버그는 MPTCP에만 국한된 것은 아니다. | Ubuntu CVE Tracker · Ubuntu Blog – Fixes in -proposed |
| 2026-11-02 | AWS는 이 결함이 Linux 커널 4.4+에 영향을 미치며 Ubuntu 기반 Lightsail 블루프린트도 범위에 포함된다고 확인했다. 완화 방법은 패치된 커널을 설치하거나 IP 옵션이 포함된 IPv4 TCP 패킷을 드롭하는 임시 방화벽 규칙을 적용하는 것이다. | AWS Docs – Address CVE-2026-98432 on Lightsail |
| 2026-10-15 | 공식 커널 CVE 공지: 근본 원인은 inet_opt / ireq_opt의 kfree() 전에 RCU 유예 기간이 누락된 것이다. 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10, 7.3-rc7에서 수정되었다. | Linux CVE Announce – Openwall |
참고: 이러한 관찰은 노출(취약한 커널 + 기본 Ubuntu의 기본 MPTCP)과 공식 수정 상태를 확인하는 것이며, 이 저장소의 익스플로잇이 특정 호스트에서 성공적으로 실행되었음을 확인하는 것은 아니다.
| 도구 | 목적 | 대상 사용자 |
|---|---|---|
cve_2026_98432 | 레드팀 및 블루팀 툴킷. 소스 및 런타임 패치 검사, 네트워크 프로브, 마커 재사용 탐지를 포함한 레이스 오라클, pcap 분석, KASLR 슬라이드 복구, 완화 지침. 대화형 메뉴 또는 직접 플래그를 사용하는 단일 명령. | 레드팀, 블루팀, 승인된 침투 테스터 |
--check | 로컬 커널 버전 및 소스 트리 검사. | 블루팀, 감사자 |
--probe | TCP 리스너에 연결할 수 있고 IPv4 SYN 옵션이 스택에 도달하는지 확인. | 레드팀, 블루팀 |
--race | 마커 기반 레이스 오라클. 조작된 SYN을 전송하고 SYN-ACK에서 흐름 간 마커 재사용을 검사. | 레드팀 (Prob) |
--pcap | 오프라인 pcap 분석. UAF 증거 및 커널 포인터 후보를 탐지. | 블루팀 (Partial) |
--map | System.map을 사용하여 유출된 텍스트 포인터로부터 KASLR 슬라이드 복구. | 레드팀 (Partial) |
--harden | 완화 조치 적용 또는 미리보기 (MPTCP 비활성화, 마이그레이션 비활성화, IP 옵션 드롭). | 블루팀 (Prob) |
| 레이블 | 의미 |
|---|---|
| (레이블 없음) | 결정적. 동일한 입력, 동일한 출력. |
| (Prob) | 레이스 결과는 실행마다 달라질 수 있다. 도구는 제한된 시간 동안 시도를 반복한다. |
| (Partial) | 올바른 입력에 의존한다. 유효한 pcap 또는 일치하는 System.map이 제공되면 도구가 작동한다. |
| 기능 | 상태 | 비고 |
|---|---|---|
| 소스 트리 패치 확인 | 결정적 | af_inet.c와 tcp_ipv4.c를 읽고 두 소멸자 모두에서 kfree_rcu를 찾습니다. |
| 실행 중인 커널 확인 | 결정적 | uname -r을 수정된 버전 테이블과 비교합니다. |
| 네트워크 프로브 | 결정적 | TCP 연결을 열고 최소한의 HTTP 요청을 보냅니다. |
| 레이스 오라클 | (Prob) | 조작된 SYN을 보내고 SYN-ACK에서 마커 재사용을 관찰합니다. root와 CAP_NET_RAW가 필요합니다. |
| Pcap 분석 | (Partial) | pcap을 파싱하여 교차 흐름 마커 재사용과 커널 포인터 후보를 찾습니다. |
| KASLR 슬라이드 복구 | (Partial) | 일치하는 System.map과 최소 하나의 유출된 text 포인터가 필요합니다. |
| 완화 조치 적용 | (Prob) | nftables 규칙과 sysctl을 작성합니다. 이 규칙은 IP 옵션을 포함한 IPv4 TCP 패킷을 드롭합니다. |
| 대량 스캔 | 결정적 | CIDR, 파일 또는 단일 대상. 속도 제한과 진행 상황 출력을 갖춘 비동기 방식. |
| JSON / JSONL / CSV | 결정적 | 출력 파일 확장자로 선택됩니다. |
| 프록시 / Tor / 지터 | 결정적 | 모든 네트워크 작업에 적용됩니다. |
| 재개 | 결정적 | 완료된 target:port 쌍을 상태 파일에 저장합니다. |
git clone https://github.com/tc4dy/CVE-2026-98432-PoC-Exploit
cd CVE-2026-98432-PoC-Exploit
# No requirements; no extra pip packages needed.
저장소 루트에서 툴킷을 시작하세요:
python -m cve_2026_98432
플래그 없이 실행하면 대화형 메뉴가 열립니다:
[1] source patch check
[2] network probe (Prob)
[3] race trigger (Prob)
[4] pcap analysis (Partial)
[5] KASLR resolve (Partial)
[6] apply hardening (Prob)
[0] exit
| 플래그 | 설명 |
|---|---|
-t, --target | 대상 IP, 호스트명 또는 CIDR |
-l, --list | 대상 목록이 담긴 파일 (한 줄에 하나, #은 주석) |
-p, --port | 대상 포트 (기본값: 80) |
--timeout | 연결/읽기 타임아웃(초) (기본값: 10.0) |
--check | 로컬 커널 및 소스 트리 패치 검사 실행 |
--probe | TCP 리스너에 도달 가능한지 확인 |
--race | 레이스 오라클(Prob) 실행 |
--pcap | pcap 파일 분석 |
--map | KASLR 슬라이드 복구용 System.map |
--harden | 완화 계획 표시 또는 --apply로 적용 |
--apply | 완화 적용 (root 필요) |
--proxy | 단일 SOCKS5 프록시 (예: socks5://127.0.0.1:1080) |
--proxy-file | SOCKS5 프록시 목록 파일 (요청마다 순환) |
--tor | Tor를 통해 라우팅 (socks5://127.0.0.1:9050) |
--jitter | 요청 간 MIN-MAX 초 (기본값: 0-2) |
--rate-limit | 초당 요청 수 (기본값: 5.0) |
--threads | 대량 스캔용 동시 워커 수 (기본값: 10) |
--resume | 대량 스캔 재개용 상태 파일 |
-o, --output | 결과를 .json, .jsonl 또는 .csv로 저장 |
-v, --verbose | 상세 출력 |
-q, --quiet | 오류 외 출력 억제 |
--dry-run | 패킷을 보내지 않고 계획만 출력 |
--no-color | ANSI 색상 비활성화 |