
CVE-2026-98432에 대한 Ubuntu 커널 패치 상태를 평가하고, IP 옵션을 포함한 IPv4 TCP 패킷을 드롭하는 영구적인 nftables 또는 iptables 임시 방편을 적용하는 셸 스크립트입니다.
# 1. Inspect the host; no changes.
sudo ./cve-2026-98432-mitigate.sh check
# 2. Get a patch-state verdict for the exact running kernel package.
sudo ./cve-2026-98432-mitigate.sh assess
# 3. Apply the stopgap filter and make it survive reboot.
sudo ./cve-2026-98432-mitigate.sh enable
# 4. Prove that normal TCP still works and IP-option TCP is dropped.
sudo ./cve-2026-98432-mitigate.sh verify
# 5. Monitor. Exit 0 = healthy, 1 = mismatch/persistence failure, 2 = no state.
sudo ./cve-2026-98432-mitigate.sh status
# 6. After booting a kernel that Ubuntu marks as fixed.
sudo ./cve-2026-98432-mitigate.sh disable
enable는 CIPSO/NetLabel이 감지되면 규칙 세트 변경을 거부합니다. 해당 규칙이 레이블이 지정된 트래픽을 포함하여 IP 옵션을 운반하는 모든 TCP를 드롭하기 때문입니다. 이러한 트레이드오프를 감수하는 경우에만 --ignore-cipso를 사용하십시오. systemd가 없는 컨테이너나 호스트는 --no-persist를 사용해야 합니다. 그렇지 않으면 재부팅 지속성을 설정할 수 없을 때 enable이 활성 규칙을 유지한 채 종료 코드 4로 종료됩니다.
CVE-2026-98432는 Linux IPv4 TCP 핸드셰이크의 use-after-free입니다. 이는 수신 SYN이 IP 옵션을 운반할 때 도달 가능합니다. 실제 수정은 패치된 커널이며, 이 스크립트는 IP 헤더 길이가 5보다 큰(즉, IP 옵션을 운반하는) 인바운드 IPv4 TCP 패킷을 conntrack 및 Docker NAT 이전에 드롭하는 임시 방편입니다.
두 가지 동등한 백엔드를 지원합니다:
table ip cve_2026_98432, prerouting 우선순위 -310, TCP 전용, 카운터, 드롭.raw PREROUTING, u32 매치 0>>24&0xf=6:15, TCP 전용, 카운터, 드롭.nft 형태는 ip 패밀리와 숫자 우선순위를 사용하므로 Ubuntu 16.04의 nft 0.5와 최신 nft 1.x 모두에서 작동합니다. iptables 형태는 iptables 1.6 이상에서 작동합니다. --install-nft가 전달되지 않는 한 어떤 패키지도 설치되지 않습니다.
스크립트는 조각이 아닌 전체 예상 규칙을 검증합니다. nft의 경우 pre 체인이 정확히 우선순위 -310(또는 레거시 raw - 10 표기)에서 prerouting 훅을 가져야 하고 예상 DROP이 첫 번째 규칙이어야 합니다. iptables의 경우 iptables -C가 성공하고 정규화 후 전체 첫 번째 raw PREROUTING 규칙이 일치해야 합니다. enable은 재적용을 거부하는 대신 밀려난 규칙을 복구합니다.
Akamai의 스크립트는 아래의 평가 및 안전성 아이디어에 기여했습니다. 우리의 것이 더 엄격하고 16.04와 호환되므로 그 적용 형태는 채택되지 않았습니다. 통합된 가장 중요한 발견 사항을 우선순위 순으로 정리하면 다음과 같습니다:
assess는 실행 중인 커널의 정확한 이미지 패키지를 확인합니다(linux-image-$KVER, 그다음 linux-image-unsigned-$KVER, 그다음 /boot/vmlinuz-$KVER의 소유자). linux-image-generic과 같은 메타패키지는 맥락으로만 표시되며 판정 증거로는 절대 사용되지 않습니다. 변경 로그 적중은 강력하지만 오류 가능성이 있는 증거입니다. 변경 로그가 없더라도 수정 릴리스 이상의 독립적으로 결정적인 깨끗한 업스트림 버전이 있으면 여전히 PATCHED가 됩니다. 증거가 없는 벤더 커널은 UNKNOWN이 됩니다.enable이 종료 코드 4로 종료되게 합니다. status는 oneshot의 런타임 상태와 독립적으로 지속성을 평가하며 enabled-runtime을 비지속성으로 거부합니다.detected는 기본적으로 거부하고, unknown은 경고하며, not_detected는 진행합니다. netlabelctl이 없다고 해서 CIPSO가 없다는 증거는 아닙니다.check는 검증된 사용 가능, 존재하지만 미검증, 사용 불가, 알 수 없음을 구분합니다. --backend nft는 iptables가 작동하더라도 nft를 평가합니다.XDP_PASS는 여전히 커널 스택으로 진입합니다.-x) 출력을 사용하며, 이전 버전의 레거시 filter/INPUT 규칙은 raw 교체가 로드된 후 보고되고 제거됩니다.규칙 일치와 상태 파일 형식은 하위 호환됩니다. 먼저 disable할 필요가 없습니다. 이 버전으로 enable을 다시 실행하면 규칙이 제자리에서 복구되고, 업데이트된 부팅 유닛이 설치되며, 새로운 지속성 필드가 기록됩니다. 이전 상태 파일에 persist= 줄이 없으면 status는 누락된 필드에서 실패하는 대신 유닛 상태로부터 지속성을 추론합니다.
알아두어야 할 운영상의 변경 사항:
enable은 규칙이 활성 상태이지만 재부팅 지속성에 실패하면 종료 코드 4로 종료됩니다. 이전에는 이 경우 0으로 종료될 수 있었습니다.check는 검증된 사용 가능한 백엔드에 대해서만 0을 반환하고, 사용 가능한 백엔드가 없으면 1, 존재하지만 검증되지 않으면 4, 사용법 오류에는 2를 반환합니다.assess는 새로 추가되었으며 아래에 문서화된 대로 0/1/3/4를 반환합니다.--ignore-cipso가 전달되지 않는 한 enable을 거부합니다.ExecStart가 적용되도록 enable을 다시 실행하십시오.작성: 2026-10-30 (2026-10-31 업데이트)
Ubuntu 트래커 확인: 2026-10-31 11:59 UTC (페이지 최종 업데이트 2026-10-30). 아직 수정된 커널이 출시되지 않았습니다.
범위: Linux 서버, 주로 Ubuntu 16.04 (xenial), 22.04 (jammy), 24.04 (noble), 26.04 (resolute), Docker/BTCPay 호스트 포함.
산출물: 이 디렉터리의 cve-2026-98432-mitigate.sh.
테스트 환경: Ubuntu 16.04, 22.04, 24.04, 26.04.
6.8.0-149.149), 22.04(5.15.0-203.213), 26.04(7.0.0-43.43), 26.10(7.3.0-10.10)에 대해 여전히 "vulnerable work in progress"라고 표시합니다.Ubuntu 설명에서:
tcp_v4_syn_recv_sock()는 ireq->ireq_opt의 소유권을 복사하지 않고 자식 소켓(newinet->inet_opt)으로 이전합니다.tcp_check_req()에서 SYNACK을 보낼 수 있습니다. tcp_v4_send_synack()과 inet_csk_route_req()는 rcu_read_lock() 아래에서만 ireq->ireq_opt를 읽습니다.079096f103fa), SYNACK이 아직 생성되는 중에 자식 소켓이 해제될 수 있습니다. TCP 자식 소켓에는 SOCK_RCU_FREE가 없으며, inet_sock_destruct()는 inet_opt를 일반 kfree()로 해제하므로 ip_options_build()에서 use-after-free가 발생합니다.net.ipv4.tcp_migrate_req=1 또는 BPF_SK_REUSEPORT_SELECT_OR_MIGRATE 프로그램)과 관련된 두 번째 변형도 존재합니다. inet_reqsk_clone()이 ireq_opt를 공유하며, tcp_v4_reqsk_destructor() 역시 일반 kfree()를 사용합니다.inet_sock_destruct()와 tcp_v4_reqsk_destructor()에서 kfree_rcu()를 사용하는 것입니다.tcp_v6_syn_recv_sock()이 옵션을 복제하기 때문에 첫 번째 문제의 영향을 받지 않습니다. IPv6 마이그레이션/CALIPSO 문제는 별도의 패치에서 처리되고 있습니다.실질적 노출 범위: IPv4 TCP 서비스를 실행하는 모든 호스트 — SSH, 웹, Docker로 게시된 포트, BTCPay, Lightning 등 — 가 도달 가능합니다. 트리거는 IP 헤더 길이가 5보다 큰 SYN(즉, IP 옵션이 존재하는 경우)입니다. 일반적인 TCP 옵션(MSS, 윈도우 스케일, SACK, 타임스탬프)은 IP 옵션이 아니며 영향을 받지 않습니다.
영향을 받는 어떤 Ubuntu 릴리스에도 수정된 커널이 게시되지 않았습니다. 아래 상태는 이전 확인 시점과 동일합니다.
| 릴리스 | 커널 라인 | Ubuntu 상태 |
|---|---|---|
| 26.10 stonking | 7.3 | 취약, 7.3.0-10.10에서 수정 작업 진행 중 |
| 26.04 LTS resolute | 7.0 | 취약, 7.0.0-43.43에서 수정 작업 진행 중 |
| 24.04 LTS noble | 6.8 | 취약, 6.8.0-149.149에서 수정 작업 진행 중 |
| 24.04 HWE 6.17 / 7.0 | 6.17 / 7.0 | 취약 |
| 22.04 LTS jammy | 5.15 | 취약, 5.15.0-203.213에서 수정 작업 진행 중 |
| 22.04 HWE 6.8 | 6.8 | 취약, 6.8.0-149.149~22.04.1에서 수정 작업 진행 중 |
| 20.04 LTS focal | 5.4 | 취약 |
| 18.04 LTS bionic | 4.15 | 취약 |
| 16.04 LTS xenial | 4.4 | 취약 |
| 14.04 LTS trusty | 3.13 (기본) | 영향 없음; HWE 커널은 영향을 받을 수 있음 |
클라우드 및 파생 커널(aws, azure, gcp, gke, oracle, ibm, nvidia, lowlatency 등)도 취약 또는 수정 진행 중으로 나열되어 있습니다. 실행 중인 특정 커널 패키지를 확인하십시오. 트래커에 각각이 나열되어 있습니다.