
Interimsmäßige nftables-Mitigation für Linux-Kernel CVE-2026-98432 (IPv4-Options-UAF in tcp_v4_syn_recv_sock) als reproduzierbare Agent-Skill
Agent-Skill, die die vorläufige Host-Mitigation für die Linux-Kernel-Schwachstelle CVE-2026-98432 (CVSS 9.8) anwendet, verifiziert, dauerhaft einrichtet und später wieder entfernt: eine einzelne nftables-Regel, die TCP-Pakete mit IPv4-Optionen verwirft — die einzige Eingabe, die den inet_opt/ireq_opt-Use-after-free in tcp_v4_syn_recv_sock() erreicht.
Kontext, den man kennen sollte: Anthropics Frontier Red Team hat öffentlich einen funktionierenden PoC von unauthentifiziert bis root gegen Server beschrieben, die einen MPTCP-Listener exponieren (Okt. 2026); keine Ausnutzung in freier Wildbahn gemeldet. Die Kernel-CNA bewertet mit 9.8; Upstream und Red Hat bewerten mit 8.1 (Angriffskomplexität hoch). Der Hersteller-Fix sind Backports der Ubuntu-Kernel-Klasse 6.8.0-149 — bis der laufende Kernel den Fix enthält, ist diese Regel die Überbrückungslösung. Sie ist auf ein einziges Feld eines einzigen Headers eines einzigen Protokolls beschränkt, sodass normaler Traffic unberührt bleibt.
Diese Regel ist nicht neu — behandle sie als paketierte Vorarbeiten. Siehe „Vorarbeiten" unten; der Beitrag dieses Repos ist die reproduzierbare Agent-Skill-Form plus die Produktions-Fallstricke.
| Pfad | Was |
|---|---|
SKILL.md | Die Skill — Frontmatter-Trigger, Ruleset, Prüfungen, Persistenz, Fallstricke, Entfernung |
files/cve98432.nft | Kopierfertiges nftables-Ruleset (prerouting, Priorität −300) |
files/nft-cve98432.service | Kopierfertige systemd-Unit (Persistenz) |
cp -R cve-2026-98432-nft-mitigation ~/.claude/skills/ # Claude Code
cp -R cve-2026-98432-nft-mitigation ~/.agents/skills/ # agents-style runtimes
Das description-Frontmatter ist die Discovery-Oberfläche: Agenten wählen diesen Skill aus, wenn sie aufgefordert werden, CVE-2026-98432 zu mitigieren, den „TCP/IP-Fix“, den Kernel-IPv4-Options-UAF, oder die Mitigation zu entfernen, nachdem der Vendor-Kernel ausgeliefert wurde.
zgrep -c CVE-2026-98432 /usr/share/doc/linux-modules-$(uname -r)/changelog.Debian.gz # Debian/Ubuntu
rpm -q --changelog kernel-core-$(uname -r) | grep -c CVE-2026-98432 # RHEL/Rocky/Alma
> 0 = festgelegt, überspringe die Mitigation. (Prüfe auch deinen Vendor-Tracker; und
apt-cache policy linux-image-generic für einen installierten, aber nicht gebooteten neueren Kernel.)ss -lnMp): Der veröffentlichte PoC zielt auf sie ab, und Go ≥ 1.24 lauscht
standardmäßig mit MPTCP auf Kerneln, die dies erlauben. sysctl net.mptcp.enabled=0 betrifft nur
neue Sockets — bereits geöffnete Listener behalten MPTCP, bis ihr Dienst neu gestartet wird
(GODEBUG=multipathtcp=0 laut dem Go-Team).cat /sys/kernel/security/lsm SELinux oder Smack auflistet und
du NetLabel-CIPSOV4-Mapping verwendest, sind IPv4-Optionen dort legitim — diese Regel würde
diesen Pfad brechen. Nicht auf CIPSO-gelabelten Netzwerken anwenden (RFC 7126 diskutiert den Kompromiss).files/cve98432.nft und files/nft-cve98432.service.nft -c -f /usr/local/sbin/cve98432.nft — Parse-Prüfung; erfordert Root (als Nicht-Root schlägt es
bei netlink fehl: cache initialization failed).systemctl daemon-reload && systemctl enable --now nft-cve98432.servicedestroy table … muss die
erste Zeile der Datei sein: ans Ende angehängt erstellt sie die Tabelle und zerstört sie dann,
wodurch ein leeres Ruleset zurückbleibt, während der Dienst trotzdem mit 0 beendet wird.nft list table inet cve98432 muss
meta l4proto tcp ip hdrlength > 5 counter drop auf einer Chain mit priority -300
anzeigen (vor conntrack, entsprechend der veröffentlichten Regel).table inet … gehört nicht iptables, daher lassen
iptables-restore / ufw / firewalld-Tooling sie unangetastet (führe dein Restore einmal aus und liste erneut auf, um dies zu bestätigen).Entfernung nach Installation und Neustart des festgelegten Kernels: Abschnitt 7 von SKILL.md.
Der nftables-Zustand ist pro Netzwerk-Namespace. Host-Regeln sehen den Container-Traffic nur dort, wo
er den Host überquert (z. B. Container → außen); Traffic, der innerhalb des eigenen Namespace des Containers
bleibt (Container → eigenes Loopback/IP), durchläuft niemals das prerouting des Hosts —
dennoch wird der Kernel geteilt, sodass Code innerhalb eines Containers die UAF lokal weiterhin erreichen kann. Injiziere
dasselbe Ruleset in jeden laufenden Container:
# Docker (host-side nsenter keeps the needed capabilities)
for c in $(docker ps -q); do
pid=$(docker inspect -f '{{.State.Pid}}' "$c")
nsenter -t "$pid" -n /usr/sbin/nft -f /usr/local/sbin/cve98432.nft
done
# LXC (privileged CLI as root)
for c in $(lxc-ls -1 2>/dev/null); do lxc-attach -n "$c" -- nft -f /usr/local/sbin/cve98432.nft; done
Container-Namespaces persistieren nft-Regeln nicht — bei jedem Container-Neustart erneut ausführen (in den Post-Start-Schritt Ihres Orchestrators einbinden). Vorarbeiten zu genau dieser Lücke, mit Skripten:
typhoon1217/cve-2026-98432-mitigation (inject-netns.sh).
Standard-Sockets genügen — kein Packet-Crafting auf dem Server: Ein Client setzt eine IPv4-Record-Route-Option über setsockopt(IP_OPTIONS) und verbindet sich; ein einfacher Connect gelingt, der Options-Connect muss in einen Timeout laufen, während der Zähler der Regel hochzählt. Fertige Clients:
check-blocked.py / verify-synack.sh in typhoon1217/cve-2026-98432-mitigation.
Einschränkung aus diesem Projekt: Ein Client, der die Mitigation selbst ausführt, verwirft auch die SYN-ACK-Echos des Ziels — testen Sie von einem nicht mitigierten Client aus für ein sauberes Ergebnis.
prerouting bei priority -300: vor conntrack, sodass verworfene Pakete niemals conntrack-Status erzeugen — und, anders als input, deckt es auch an Container/VMs weitergeleiteten Verkehr ab,
der den Host durchquert.@nh,4,4 > 5 zu
ip hdrlength > 5 — das IHL-Feld, bestätigt durch das Tool selbst.typhoon1217/cve-2026-98432-mitigation — dieselbe Drop-Regel + Container-Netns-Injection,
CIPSO-Einschränkung, Verifikations-Clients (EN/KO)Destilliert aus einem Produktionseinsatz, einschließlich dort aufgetretener Fehler: nft -c als Nicht-Root, der destroy-am-Ende-Reihenfolgefehler, ein nicht gequotetes Heredoc, das stillschweigend \$ verschluckte, und die Double-Apply-Semantik. Reines Dokumentations-Repository — Laufzeitabhängigkeiten: nft ≥ 1.0 + systemd; keine Testsuite
(n/a).