
Shell-Skript, das den Patch-Status des Ubuntu-Kernels für CVE-2026-98432 bewertet und eine dauerhafte nftables- oder iptables-Übergangslösung anwendet, die IPv4-TCP-Pakete mit IP-Optionen verwirft.
# 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 weigert sich, das Ruleset zu ändern, wenn CIPSO/NetLabel erkannt wird, da die Regel sämtlichen TCP-Verkehr mit IP-Optionen verwirft, einschließlich gelabeltem Traffic. Verwenden Sie --ignore-cipso nur, wenn Sie diesen Kompromiss akzeptieren. Container oder Hosts ohne systemd sollten --no-persist verwenden; andernfalls beendet sich enable mit Exit-Code 4, wenn die Persistenz über einen Neustart hinweg nicht hergestellt werden kann, während die aktive Regel beibehalten wird.
CVE-2026-98432 ist eine Use-after-free-Schwachstelle im Linux-IPv4-TCP-Handshake. Sie ist erreichbar, wenn ein eingehendes SYN IP-Optionen enthält. Die eigentliche Lösung ist ein gepatchter Kernel; dieses Skript ist eine Übergangslösung, die eingehende IPv4-TCP-Pakete verwirft, deren IP-Header-Länge größer als 5 ist (IHL 6-15), d. h. Pakete, die IP-Optionen tragen, und zwar vor conntrack und Docker-NAT.
Es unterstützt zwei gleichwertige Backends:
table ip cve_2026_98432, Prerouting-Priorität -310, nur TCP, Counter, Drop.raw PREROUTING, u32-Match 0>>24&0xf=6:15, nur TCP, Counter, Drop.Die nft-Form verwendet die ip-Familie und eine numerische Priorität, damit sie sowohl auf Ubuntu 16.04 mit nft 0.5 als auch mit aktuellem nft 1.x funktioniert. Die iptables-Form funktioniert mit iptables 1.6 und später. Es wird kein Paket installiert, es sei denn, --install-nft wird übergeben.
Das Skript validiert die vollständige erwartete Regel, nicht Fragmente. Für nft verlangt es, dass die pre-Chain den Prerouting-Hook mit exakt Priorität -310 (oder der veralteten Schreibweise raw - 10) trägt und der erwartete DROP die erste Regel ist. Für iptables verlangt es, dass iptables -C erfolgreich ist und die vollständige erste raw-PREROUTING-Regel nach der Normalisierung übereinstimmt. enable repariert eine verschobene Regel, anstatt sich zu weigern, sie erneut anzuwenden.
Akamais Skript lieferte die unten aufgeführten Bewertungs- und Sicherheitsideen. Seine Durchsetzungsform wurde nicht übernommen, da unsere strenger und mit 16.04 kompatibel ist. Die wichtigsten übernommenen Erkenntnisse, in Prioritätsreihenfolge:
assess ermittelt das exakte Image-Paket des laufenden Kernels (linux-image-$KVER, dann linux-image-unsigned-$KVER, dann den Eigentümer von /boot/vmlinuz-$KVER). Metapakete wie linux-image-generic werden nur als Kontext angezeigt und nie als Nachweis für das Urteil verwendet. Ein Changelog-Treffer ist ein starker, aber fehlbarer Nachweis; ein fehlendes Changelog zusammen mit einer unabhängig schlüssigen sauberen Upstream-Version auf oder über dem festgelegten Fix-Release ergibt dennoch PATCHED; ein Vendor-Kernel ohne Nachweis ergibt UNKNOWN.enable mit Exit-Code 4 beendet wird, während die Regel aktiv bleibt. status bewertet die Persistenz unabhängig vom Laufzeitzustand des Oneshot und lehnt enabled-runtime als nicht persistent ab.detected verweigert standardmäßig, unknown warnt, not_detected fährt fort. Ein fehlendes netlabelctl beweist nicht, dass CIPSO nicht vorhanden ist.check unterscheidet zwischen verifiziert nutzbar, vorhanden-unverifiziert, unbrauchbar und unbekannt; --backend nft wertet nft auch dann aus, wenn iptables funktioniert.XDP_PASS gelangt weiterhin in den Kernel-Stack.-x) Ausgaben, und eine veraltete filter/INPUT-Regel aus einer früheren Version wird gemeldet und entfernt, nachdem der raw-Ersatz geladen wurde.Der Regelabgleich und das Format der Statusdatei sind abwärtskompatibel. Du musst nicht zuerst disable ausführen; ein erneutes Ausführen von enable mit dieser Version repariert die Regel direkt, installiert die aktualisierte Boot-Unit und zeichnet das neue Persistenzfeld auf. Wenn eine alte Statusdatei keine persist=-Zeile enthält, leitet status die Persistenz aus dem Unit-Status ab, anstatt wegen des fehlenden Feldes fehlzuschlagen.
Betriebliche Änderungen, die du kennen solltest:
enable beendet sich jetzt mit Exit-Code 4, wenn die Regel aktiv ist, aber die Persistenz über einen Neustart fehlgeschlagen ist. Zuvor konnte es in diesem Fall mit 0 beendet werden.check gibt jetzt nur noch 0 für ein verifiziertes nutzbares Backend zurück, 1 für kein nutzbares Backend, 4 für vorhanden-aber-unverifiziert und 2 für Fehlbedienung.assess ist neu und gibt 0/1/3/4 zurück, wie unten dokumentiert.enable, es sei denn, --ignore-cipso wird übergeben.enable erneut aus, damit die neue Unit-Reihenfolge und ExecStart angewendet werden.Erstellt: 2026-10-30 (aktualisiert 2026-10-31)
Ubuntu-Tracker geprüft: 2026-10-31 11:59 UTC (Seite zuletzt aktualisiert am 2026-10-30). Es wurde noch kein fester Kernel ausgeliefert.
Geltungsbereich: Linux-Server, hauptsächlich Ubuntu 16.04 (xenial), 22.04 (jammy), 24.04 (noble) und 26.04 (resolute), einschließlich Docker/BTCPay-Hosts.
Liefergegenstand: cve-2026-98432-mitigate.sh in diesem Verzeichnis.
Getestet auf: Ubuntu 16.04, 22.04, 24.04 und 26.04.