
Linux 서버에서 CVE-2026-98432(IPv4 TCP use-after-free, CVSS 9.8)를 점검합니다: 근본 원인 설명, 읽기 전용 점검 스크립트 및 완화 조치.
Linux 커널의 IPv4 TCP 핸드셰이크에서 발생하는 경쟁 조건으로, 원격 공격자가 해제된 커널 메모리를 사용할 수 있게 하는 CVE-2026-98432를 이해하고 점검하세요. Anthropic의 Frontier Red Team은 이를 multipath TCP (MPTCP) 리스너가 있는 서버를 대상으로 한 제로 클릭 root 익스플로잇으로 발전시켰습니다. 2026년 10월 30일 기준으로 Ubuntu와 Red Hat에는 아직 수정된 커널이 없습니다.
대신 명령 출력을 브라우저에 붙여넣으세요: https://fbuff.com/tools/cve-2026-98432-checker/ (로컬에서 실행되며, 아무것도 업로드되지 않습니다)
모든 TCP 연결은 핸드셰이크로 시작됩니다. 클라이언트가 SYN을 보내고, 서버가 SYN-ACK로 응답하며, 클라이언트가 ACK로 답합니다. SYN과 ACK 사이에 커널은 반쯤 열린 연결을 위해 작은 자리 표시자, 즉 request socket을 유지합니다. 클라이언트의 SYN에 IPv4 옵션(Record Route, Timestamp 등)이 포함되어 있었다면, SYN-ACK가 이를 그대로 되돌려 보내야 하므로 커널은 해당 옵션을 자리 표시자(ireq_opt)와 함께 보관합니다.
ACK가 도착하면 tcp_v4_syn_recv_sock()이 자리 표시자를 완전한 소켓으로 전환하면서 복사본이 아닌 동일한 옵션 블록을 넘겨줍니다. 이제 두 객체가 하나의 메모리 블록을 가리킵니다. 완전한 소켓이 파괴되면 inet_sock_destruct()가 그 블록을 단순한 kfree()로 즉시 해제합니다.
자리 표시자는 established-connections 해시 테이블에 위치하며, 다른 CPU들이 잠금 없이 이를 읽습니다(이 설계는 커밋 079096f103fa, "tcp/dccp: install syn_recv requests into ehash table", Linux 4.4, 2015와 함께 도입되었습니다). 클라이언트가 적절한 순간에 SYN을 재전송하면, 다른 CPU가 SYN-ACK를 다시 보내면서 ip_options_build()에서 옵션을 읽는 동안 해당 블록이 해제됩니다. 이것이 use-after-free입니다.
두 사람에게 같은 번호표를 주는 코트 체크를 생각해 보세요. 한 사람이 떠날 때, 다른 사람이 아직 번호표를 들고 카운터로 걸어가는 중인데도 직원이 번호표를 버려버립니다.
수정 (업스트림 커밋 e3f33b0a1d89, "ipv4: free inet_opt and ireq_opt after an RCU grace period", 7.3-rc7)은 모든 CPU가 읽기를 마칠 때까지 기다리는 kfree_rcu()로 블록을 해제합니다. IPv6는 tcp_v6_syn_recv_sock()이 옵션을 복사하기 때문에 주요 문제의 영향을 받지 않습니다. 요청 마이그레이션(net.ipv4.tcp_migrate_req=1 또는 BPF_SK_REUSEPORT_SELECT_OR_MIGRATE 프로그램)을 통해서도 동일한 메모리에 도달하는 두 번째 경로가 존재합니다.
| 평가 기관 | 점수 | 비고 |
|---|---|---|
| Linux kernel CVE team (CNA) | 9.8 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Red Hat | 8.1 | AC:H: 경쟁 조건을 이기기 어려움 (잠정) |
| Ubuntu | 9.8, priority High |
MPTCP를 사용하면 하나의 연결이 여러 경로를 동시에 사용할 수 있습니다. Linux에서는 선택 사항입니다. 프로그램이 MPTCP 소켓을 요청해야 하며, ss -Mltn이 리스닝 중인 소켓을 나열합니다. Anthropic의 익스플로잇은 "multipath TCP 리스너가 있는 Linux 서버"를 대상으로 합니다. CVE 레코드와 수정 사항 모두 MPTCP를 언급하지 않으며, Anthropic은 MPTCP 리스너가 없는 서버도 장악할 수 있는지 밝히지 않았습니다. MPTCP 리스너는 root 권한 획득이 입증된 경로이며, 패치되지 않은 모든 서버는 여전히 결함이 있는 코드를 실행합니다.
| 배포판 | 상태 |
|---|---|
| Debian 12 bookworm | 수정됨: linux 6.1.190-1 (DLA-4841-1), linux-6.12 6.12.113-1~deb12u1 |
| Debian 13 trixie | 수정됨: linux 6.12.113-1 (DSA-6568-1) |
| Ubuntu 22.04, 24.04, 26.04, 26.10 | 취약, 수정 진행 중 |
| Ubuntu 16.04, 18.04, 20.04 | 취약 |
| Ubuntu 14.04 | 영향 없음 |
| Red Hat Enterprise Linux | 영향 받음; Red Hat은 자사 기준을 충족하는 완화책이 없다고 밝힘 |
| Upstream stable | 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 및 7.3에서 수정됨 |
curl -fsSLO https://raw.githubusercontent.com/fbuff-tools/cve-2026-98432-checker/main/check.sh
sh check.sh
스크립트는 uname -r, /etc/os-release, 커널 패키지 체인지로그(rpm -q --changelog, 또는 네트워크가 필요한 apt changelog), sysctl net.mptcp.enabled net.ipv4.tcp_migrate_req 및 ss -Mltn을 읽습니다. 판정 결과를 출력하고 0(패치됨 또는 영향 없음), 1(취약함) 또는 2(판단 불가)로 종료합니다. 읽기만 수행하며, 아무것도 전송하거나 변경하지 않습니다. 컨테이너는 호스트 커널을 공유하므로 호스트에서 실행하십시오.
Ubuntu의 6.8.0-85나 RHEL의 5.14.0-570 같은 배포판 커널은 버전 번호를 바꾸지 않고 수정 사항을 백포트하므로, 해당 체인지로그만이 이를 알려줄 수 있습니다. 업스트림 방식의 버전(6.12.113+deb13)은 위의 수정된 릴리스와 비교됩니다.
sudo apt update && sudo apt full-upgrade # Debian, Ubuntu
sudo dnf upgrade kernel # RHEL family, Amazon Linux 2023
sudo zypper patch # SUSE
sudo reboot
sudo sysctl -w net.mptcp.enabled=0
sudo sysctl -w net.ipv4.tcp_migrate_req=0
printf 'net.mptcp.enabled = 0\nnet.ipv4.tcp_migrate_req = 0\n' | sudo tee /etc/sysctl.d/90-cve-2026-98432.conf
ip_options_build 또는 ip_build_and_send_pkt를 명시하는 커널 로그 라인(journalctl -k), 또는 한 소스에서 IPv4 옵션이 포함된 SYN 버스트가 그것입니다.2-4단계 중 어느 것도 패치를 대체하지 않으며, 어떤 벤더도 이를 완전한 우회 방법으로 확인하지 않았습니다.
관련 항목: KSMBD checker, HTTP2Shell checker, PHP2Shell checker.
정보 기준일: 2026년 10월 30일; 수정 상태는 빠르게 변하므로 벤더의 트래커를 확인하세요. MIT 라이선스. 제작: fbuff.