
Mitigations-Toolkit für den IPv4-TCP-Use-after-free in inet_opt/ireq_opt: Expositionsprüfung, nft-Drop-Regeln für SYN mit IP-Optionen, tcpdump-Erkennung und kpatch/livepatch-Builder für EL-Kernel.
IPv4-TCP-inet_opt/ireq_opt-Use-after-free (Upstream-Fix e3f33b0a,
kfree → kfree_rcu in inet_sock_destruct() + tcp_v4_reqsk_destructor()).
Auslöser: Client-SYN mit IPv4-Optionen (ihl > 5) — ohne Optionen wird das
umkämpfte Objekt ireq_opt nie alloziert. Der behauptete Remote-Root-Exploit
benötigt zusätzlich einen MPTCP-Listener.
| Datei | benötigt Root | Zweck |
|---|---|---|
cve-audit.sh | nein | schreibgeschützter Expositions- und Patchbarkeitsbericht |
cve-mitigate.sh | anwenden/rückgängig machen | nft-Drop von SYNs mit IP-Optionen, optional MPTCP aus |
nft-rules.txt | — | das Regelset eigenständig (nft -f nft-rules.txt) |
cve-detect.sh | Capture-Modi | tcpdump-Sensor für die Paketform des Exploits |
kpatch-el-build.sh | bauen/installieren | validierter kpatch/Livepatch-Builder für die EL-Familie |
klp-handcraft-build.sh | bauen/laden | handgeschriebenes klp-Modul für IBT-Kernel, auf denen kpatch-build nicht laufen kann (EL10) |
patches/CVE-2026-98432.patch | — | Upstream-Fix, bereit für kpatch-build |
tests/run-tests.sh | nein | Harness (netns-Regelset-Laden + Stub-Builder-E2E) |
./cve-audit.sh # where do I stand?
./cve-mitigate.sh apply --with-mptcp-off # closes trigger + claimed root path
./cve-detect.sh count 30 # anyone probing with IP options?
sudo ./kpatch-el-build.sh --name CVE-2026-98432 \
--expect inet_sock_destruct,tcp_v4_reqsk_destructor \
[--sign priv.pem cert.pem] [--install] \
patches/CVE-2026-98432.patch
# verify: cat /sys/kernel/livepatch/CVE-2026-98432/enabled -> 1
./cve-mitigate.sh status # keep until 100% patched, then:
./cve-mitigate.sh undo
| Ziel | Hinweise |
|---|---|
| EL7 (3.10) | nicht anfällig (Trigger-Code kam in 4.4); Builder funktioniert weiterhin für andere Patches |
| EL7h/EL8 (4.18) | anfällig; kernel-debuginfo liefert /usr/src/debug/kernel-*/linux-*; kpatch-build aus EPEL |
| EL9 (5.14) | anfällig; Kernel mit gcc-toolset gebaut — Builder stellt automatisch das passende /opt/rh/gcc-toolset-* voran |
| EL10 (6.12) | IBT: kpatch-build 0.9.11 lehnt CONFIG_X86_KERNEL_IBT=y-Kernel ab (dynup/kpatch#1320) — klp-handcraft-build.sh verwenden; Modul-Signierung wird unter Secure Boot/Lockdown erzwungen |
| CloudLinux 8/9/10 | Distro-ID nicht in der Support-Liste von kpatch-build, daher übergibt der Builder immer explizit -s/-c/-v; Debuginfo stammt aus dem AlmaLinux/CentOS kernel-debuginfo passend zu rpm -qf /boot/vmlinuz-$(uname -r) |
Debuginfo unter RHEL erfordert aktivierte Repos, z. B.
dnf --enablerepo='*debug*' debuginfo-install -y $(rpm -qf /boot/vmlinuz-$(uname -r))
(subscription-manager repos --enable=rhel-9-appstream-rpms usw. auf nicht abgerechneten Hosts).
CONFIG_LIVEPATCH=y + CONFIG_KALLSYMS=y in der laufenden Konfiguration..comment-Ebene an
kpatch-build delegiert; Toolset-Suche hier durchgeführt).--expect) — ein überraschendes drittes Änderungsobjekt ist ein harter Fehler.sign-file mit deinem Schlüsselpaar + erneute Prüfung von modinfo sig_type;
Zertifikat per MOK für Secure Boot registrieren.--install legt die Datei in /var/lib/kpatch/$(uname -r)/ ab, lädt sie via
kpatch/insmod und aktiviert kpatch.service für Persistenz über Neustarts.uname -r wie die Flotte../kpatch-el-build.sh ... --install; bestätige
/sys/kernel/livepatch/<name>/enabled == 1.hping3 -S -p <port> --tcp-opts ...-Flood
auf einen Listener, während auf dem Canary net.ipv4.tcp_migrate_req=1 umgeschaltet wird;
eine KASAN-Kernel-Variante mit künstlichem udelay() innerhalb von
ip_options_build() sollte die UAF ohne den Patch reproduzieren und mit ihm
still bleiben.uname -r unverändert bleibt (Livepatch erhöht es nicht), kpatch list,
dmesg -w auf taint und klp-Übergangsstockungen
(/sys/kernel/livepatch/<name>/transition muss auf 0 abfließen).Harness: alle Prüfungen bestehen auf einer AlmaLinux 10.2 VM (Kernel 6.12.0-211.64.1.el10_2).
Echte nft-Rulesets werden geladen und in einem frischen netns aufgelistet; pcap-Filter
gegen laufendes tcpdump kompiliert; Builder-Pipeline end-to-end gegen
ein gestubbtes kpatch-build mit einem echten .ko-Fixture und injizierten Symbol-Feeds ausgeführt.
Auf dieser EL10-VM live verifiziert:
klp-handcraft-build.sh --load hat einen Livepatch gebaut und aktiviert:
/sys/kernel/livepatch/klp_CVE_2026_98432/enabled=1, Übergang abgeschlossen,
sysfs listet inet_sock_destruct,1 + tcp_v4_reqsk_destructor,1; normales
TCP (HTTP 200) unbeeinträchtigt. Ein unsigniertes .ko verunreinigt den Kernel; Secure-Boot-
Lockdown würde es ablehnen (die VM lief unsigniert).kpatch-build (dynup 0.9.11, aus dem Quellcode gebaut) schlägt auf EL10
hart fehl mit „kernel option CONFIG_X86_KERNEL_IBT not supported“ — der Builder
führt jetzt eine Vorabprüfung durch und verweist auf den Handcraft-Weg. Ein echter binärvergleichender
kpatch-build-Lauf bleibt auf EL8/EL9 unerprobt.prerouting priority -310 funktioniert aus demselben Grund.
Führe den Happy Path einmal auf deinem EL-Canary aus, bevor du ihm in einem Incident vertraust.