CVE-2026-98432: die TCP-Lücke im Linux-Kernel auf Debian, Ubuntu und Proxmox schließen

Mitte Oktober 2026 ist eine Lücke im TCP-Verbindungsaufbau des Linux-Kernels bekannt geworden, die über jeden per IPv4 erreichbaren Port angreifbar ist, ganz ohne Anmeldung. Debian und Proxmox haben gefixte Kernel ausgeliefert, Ubuntu noch nicht. Dieser Beitrag erklärt, wer betroffen ist, welche Stände sicher sind, was bis zum Patch hilft und wie Sie mit unserem freien Prüfskript Ihre Server bewerten.

Das Wichtigste vorab

  • Was: ein Use-after-free im IPv4-TCP-Handshake, CVE-2026-98432; das Kernel-CVE-Team bewertet mit CVSS 3.1 9,8, Red Hat mit 8,1.
  • Wer: jeder Linux-Kernel ab 4.4 mit einem per IPv4 erreichbaren TCP-Port, auch alle Container auf einem solchen Host.
  • Lage: Anthropic hat im Labor Root-Rechte erreicht, auf einem Server mit MPTCP-Listener. Öffentlichen Exploit-Code oder Angriffe kennen wir zum Stand dieses Beitrags nicht.
  • Fix: Debian seit 16. und 17.10., Proxmox VE 9 ab Kernel 7.0.14-25-pve; Ubuntu hat die gefixten Kernel erst in der Vorabstufe -proposed, ein älterer Kernel ist kein Ausweg. Proxmox VE 8 bekommt keinen Fix. Nach dem Update neu starten.
  • Prüfen: unser read-only Skript cve-2026-98432-check.sh bewertet Kernel und Angriffsfläche und zeigt im Terminal nur Versionen und Zählwerte. Ein Praxistest zeigt, ob Firewall und Host SYNs mit IP-Optionen wirklich verwerfen.

Prüfskript herunterladen: cve-2026-98432-check.sh, Version 1.0.1, Bash, BSD-2-Clause, ändert nichts am System.
SHA-256: ce9a5e5afd4f988fa820d53e84a761ad643b2ccc93b96e4ac11e194d26f55149
Prüfskript herunterladen Prüfsumme (.sha256)

Was ist passiert?

Gemeldet hat die Lücke Xinyang Ge von Anthropic, den Fix hat Eric Dumazet geschrieben und am 1. Oktober eingereicht. Er steckt in Linux 7.3-rc7 und in allen gepflegten Stable-Zweigen. Die Distributionen haben sehr unterschiedlich schnell nachgezogen:

Einordnung: Die Bewertungen gehen auseinander. Das Kernel-CVE-Team kommt auf CVSS 3.1 9,8, Red Hat auf 8,1, weil es die Angriffskomplexität als hoch einstuft (AC:H). Anthropic zeigt aber, dass der Angriff gelingt: Im Labor dauerte es 48 Minuten bis zur ausgelesenen Kernel-Adresse und fünf weitere bis zur Root-Shell. Den Exploit hat Anthropic nicht veröffentlicht.

Die Lücke verständlich erklärt

Beim TCP-Verbindungsaufbau legt der Kernel für jedes eingehende SYN eine Verbindungsanfrage an und merkt sich dort auch die IPv4-Optionen des Pakets, etwa Record Route oder Timestamp. Kommt das abschließende ACK, entsteht daraus der eigentliche Socket. Die Funktion tcp_v4_syn_recv_sock() übergibt ihm die Optionen, ohne sie zu kopieren.

Schickt der Client sein SYN genau in diesem Moment erneut, baut eine andere CPU aus denselben Optionen noch ein SYN-ACK, während der neue Socket schon wieder abgebaut und der Speicher freigegeben wird: ein use-after-free in ip_options_build(). Dasselbe Rennen gibt es bei der Migration von Verbindungsanfragen zwischen Sockets (net.ipv4.tcp_migrate_req=1 oder ein BPF-Programm für SO_REUSEPORT). Der Fix gibt die Optionen erst nach einer RCU-Wartefrist frei, mit kfree_rcu() statt kfree().

Ein Angreifer schickt ein IPv4-SYN mit Record Route oder Timestamp an einen offenen TCP-Port. Eine Firewall verwirft das nur mit eigener Regel, etwa Zone Protection bei PAN-OS oder nftables unter Linux. Dienste des Hosts sowie LXC- und Docker-Container laufen auf dem Kernel des Hosts und sind betroffen; KVM-VMs haben einen eigenen Kernel; ein Reverse Proxy beendet die TCP-Verbindung und schützt die Dienste dahinter.
Abbildung 1: Wo der Angriff ankommt und wo er sich aufhalten lässt.

Wer ist betroffen?

Betroffen ist jeder Kernel ab Linux 4.4, der per IPv4 Verbindungen annimmt: SSH, Webserver, Mailserver, Datenbanken, die Verwaltungsoberfläche eines Hypervisors. Entscheidend ist, welcher Kernel die Verbindung annimmt:

SystemBetroffen?Anmerkung
Linux-Server ab 4.4 mit offenem IPv4-TCP-PortjaJeder lauschende Dienst genügt; eine Anmeldung käme erst nach dem Handshake.
LXC-, Docker- und Kubernetes-Containerüber den HostContainer teilen den Kernel des Hosts. Ein Update im Container ändert nichts, der Host muss neu starten.
VMs unter KVM, VMware, Hyper-Vje GastJede VM hat ihren eigenen Kernel und muss im Gast aktualisiert werden.
Dienste hinter Reverse Proxy oder CDNBackend nein, Proxy jaDer Proxy beendet TCP und baut eine neue Verbindung auf. Reine Paketweiterleitung (NAT, LVS) schützt nicht.
Native IPv6nein (Hauptfehler)IPv4 auf Dual-Stack-Sockets schon.
RHEL 8, 9, 10ja, ohne FixRed Hat nennt zum 30.10. weder Fix noch Mitigation; RHEL 6 und 7 sind nicht betroffen.

Falle Container: Auf einem Proxmox- oder Docker-Host trifft ein Angriff auf einen Container direkt den Kernel des Hosts. Root im Kernel heißt dann Root auf dem ganzen Host, mit allen VMs und Containern darauf. Ein Mailrelay oder Reverse Proxy als LXC-Container am Internet ist deshalb so kritisch wie der Host selbst.

Sichere Versionen

Die Fixstände, Stand 31. Oktober 2026. Maßgeblich ist der laufende Kernel, nicht der installierte. Upstream sind diese Stable-Versionen korrigiert: 5.10.272 · 5.15.223 · 6.1.190 · 6.6.159 · 6.12.113 · 6.18.56 · 7.2.10 · 7.3.

SystemPaketFixstandHinweis
Debian 13 trixielinux6.12.113-1DSA-6568-1, 16.10.
Debian 12 bookwormlinux6.1.190-1DLA-4841-1, 17.10. (Debian LTS)
Debian 12 bookwormlinux-6.126.12.113-1~deb12u1DLA-4850-1, 22.10.
Debian forky · sidlinux7.2.10-1bereits in den Archiven
Proxmox VE 9proxmox-kernel-7.07.0.14-25-pvegebaut 17.10.; no-subscription, test und seit 30.10. enterprise
Proxmox VE 9, Kernel 6.17proxmox-kernel-6.17kein Fixletzter Build 6.17.13-21 vom 28.07.; auf 7.0 wechseln
Proxmox VE 8proxmox-kernel-6.8 · 6.14kein FixSupportende 08/2026, siehe unten
Ubuntu 26.10linux7.3.0-10.10angekündigt, nicht veröffentlicht
Ubuntu 26.04 LTSlinux7.0.0-43.43seit 28.10. in -proposed, nicht freigegeben; regulär gibt es 7.0.0-42 (updates) und 7.0.0-38 (security), beide ohne Fix
Ubuntu 24.04 LTSlinux6.8.0-149.149seit 26.10. in -proposed; regulär 6.8.0-147 ohne Fix; HWE-Kernel 6.17 und 7.0 noch ohne Fix
Ubuntu 22.04 LTSlinux · linux-hwe-6.85.15.0-203.213 · 6.8.0-149.149~22.04.1linux seit 26.10. in -proposed; regulär 5.15.0-202 ohne Fix
Ubuntu 20.04 und älterlinuxkein Fixnoch nicht angekündigt (ESM)

Die Cloud-Kernel von Ubuntu (linux-aws, -azure, -gcp, -oracle, -ibm) haben eigene Versionsnummern; das Prüfskript kennt die angekündigten Stände aller Varianten. Ob Canonical Livepatch die Lücke abdeckt, haben wir nicht geprüft; maßgeblich ist canonical-livepatch status.

Ein älterer Kernel ist kein Ausweg: Der Fehler steckt seit Linux 4.4 im Code, also in jedem Ubuntu-Kernel unterhalb der Fixversion. Unter 26.04 liefert resolute-security noch 7.0.0-38 aus (seit 6.10.), resolute-updates 7.0.0-42 (seit 28.10.); beide sind verwundbar. Auf 7.0.0-38 zu pinnen schützt also nicht, es verzichtet nur auf die Korrekturen, die seitdem kamen: Die Changelog-Einträge zu 7.0.0-39 und -41 nennen zusammen 1.198 CVE-Kennungen, die in den früheren Einträgen nicht vorkommen.

1.Patchen und neu starten

Auf Debian und Proxmox genügen die normalen Paketquellen. Der zweite Schritt ist der wichtige: Ein neuer Kernel wirkt erst nach dem Neustart.

BashDebian 12 und 13
sudo apt update
sudo apt full-upgrade            # pulls the fixed linux-image package
sudo reboot

# afterwards: Debian package version of the running kernel
uname -v | grep -oP 'Debian \K\S+'
BashProxmox VE 9
apt update && apt full-upgrade
apt install proxmox-kernel-7.0          # only if the node still runs 6.17
proxmox-boot-tool kernel list           # no old kernel pinned?
reboot
uname -r                                # 7.0.14-25-pve or newer

Im Cluster die Knoten nacheinander neu starten: VMs vorher migrieren, bei Ceph vorher ceph osd set noout setzen und nach dem Neustart wieder aufheben. Ob der laufende Kernel den Fix hat, zeigen diese Einzeiler mit fertigem Ergebnis:

BashLaufenden Kernel prüfen
# Proxmox VE
k=$(uname -r); dpkg --compare-versions "${k%-pve}" ge 7.0.14-25 && echo "OK: $k" || echo "VULNERABLE: $k"

# Debian
v=$(uname -v | grep -oP 'Debian \K\S+'); case "$v" in 6.1.*) t=6.1.190-1;; 6.12.*) t=6.12.113-1~deb12u1;; *) t=;; esac; [ -z "$t" ] && echo "CHECK: $v" || { dpkg --compare-versions "$v" ge "$t" && echo "OK: $v" || echo "VULNERABLE: $v"; }

Ubuntu: den Fix vorab aus -proposed holen

Bis zur Freigabe gilt für Ubuntu: Notbehelf setzen, dann apt update && apt full-upgrade und Neustart, sobald das Update erscheint. Wer exponierte Server nicht so lange offen lassen will, kann den Kernel gezielt aus der Vorabstufe -proposed holen. Dort liegen 7.0.0-43.43 für 26.04 seit 28.10., 6.8.0-149.149 für 24.04 und 5.15.0-203.213 für 22.04 seit 26.10.; das Changelog von 7.0.0-43.43 führt den Fix „ipv4: free inet_opt and ireq_opt after an RCU grace period“ auf. Wir haben die Schritte in einem Ubuntu-26.04-Container nachvollzogen: Ohne -t bleibt apt bei 7.0.0-42, mit -t kommt 7.0.0-43.43.

BashUbuntu 26.04 (für 24.04 noble-proposed, für 22.04 jammy-proposed)
# make -proposed known; priority 100 means apt takes nothing from it unasked
sudo tee /etc/apt/sources.list.d/proposed.sources >/dev/null <<'EOF'
Types: deb
URIs: http://archive.ubuntu.com/ubuntu
Suites: resolute-proposed
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
EOF
printf 'Package: *\nPin: release a=resolute-proposed\nPin-Priority: 100\n' | sudo tee /etc/apt/preferences.d/proposed-updates
sudo apt update

# dry run first: which packages would come from -proposed?
sudo apt install -s -t resolute-proposed linux-generic | grep '^Inst'
sudo apt install -t resolute-proposed linux-generic
sudo reboot
uname -r                                  # 7.0.0-43-generic

Das Prüfskript kennt die angekündigten Fixversionen und bewertet einen Kernel aus -proposed deshalb schon als gefixt.

2.Sonderfall Proxmox VE 8

Proxmox VE 8 hat seit August 2026 keinen Support mehr. Der letzte Kernel des 8er-Zweigs, 6.8.12-43, stammt vom 18. August, der optionale 6.14.11-9 vom 15. Mai. Beide sind älter als der Patch; den 7.0-Kernel gibt es für Proxmox VE 8 laut Proxmox nicht. Es bleibt nur das Upgrade auf Proxmox VE 9, mit diesen Voraussetzungen aus der Upgrade-Anleitung:

Bis das Upgrade durch ist, gehört eine Regel gegen IPv4-Optionen an die Firewall vor dem Cluster und die Verwaltungsdienste dürfen nur aus dem Verwaltungsnetz erreichbar sein.

3.Notbehelf bis zum Patch

Der Angriff braucht IPv4-Pakete mit Optionen. Wer sie verwirft, bevor sie den Kernel erreichen, nimmt ihm die Grundlage. Am wirksamsten ist das an der Firewall vor den Servern, weil es dort alle Systeme auf einmal schützt.

An der Firewall: Palo Alto Networks

Port- und Anwendungsregeln helfen nicht: Das erste SYN zu einem freigegebenen Port kommt durch, bevor App-ID die Anwendung kennt. PAN-OS verwirft IP-Optionen über ein Zone-Protection-Profil:

  1. Network › Network Profiles › Zone Protection: Profil anlegen, im Reiter Packet Based Attack Protection › IP Drop Timestamp und Record Route anhaken. Die Best Practice von Palo Alto empfiehlt zusätzlich Strict und Loose Source Routing, Unknown und Malformed.
  2. Network › Zones: das Profil der Internet-Zone zuweisen und committen.

Auf dem Host: nftables

Diese Regeln verwerfen TCP-Pakete, deren IPv4-Kopf länger als 20 Byte ist, also Optionen trägt. Die Tabelle inet sieht alles, was den Host selbst erreicht oder von ihm geroutet wird, die Tabelle bridge alles, was über eine Bridge läuft. Welche Sie brauchen, hängt davon ab, wie die Gäste angebunden sind:

VerkehrTabelleAnmerkung
Dienste des Hosts, etwa SSH oder die VerwaltungsoberflächeinetErfasst auch Verkehr aus Containern und VMs an den Host.
Gäste an einer Bridge mit physischem Uplink (Layer 2)bridgeDie Tabelle inet sieht gebridgten Verkehr nicht. Im Test kamen die SYNs mit Optionen ohne bridge-Tabelle bis zum Gast durch.
Gäste an einer Bridge, die der Host nur routetinetGenügt für Verkehr von außen. Verkehr zwischen Gästen derselben Bridge läuft über Layer 2 und braucht die Tabelle bridge.
VLAN-aware Bridge mit getaggtem UplinkbridgeDieselbe Regel greift auch bei getaggten Frames.
Verkehr innerhalb eines Containers, etwa über dessen LoopbackkeineRegeln des Hosts gelten nur in seinem eigenen Netzwerk-Namensraum. Hier hilft nur der Kernel-Fix.

Beide Tabellen zusammen decken jede dieser Anbindungen ab, die letzte ausgenommen. Die Datei lässt sich mehrfach laden und ersetzt dabei nur ihre eigenen Tabellen:

nftables/etc/nftables.d/cve-2026-98432.nft
#!/usr/sbin/nft -f
# Stopgap CVE-2026-98432: drop IPv4 TCP packets that carry IP options.
# Re-running replaces only these two tables; other tables stay untouched.
table inet cve98432
delete table inet cve98432
table bridge cve98432
delete table bridge cve98432

table inet cve98432 {
  chain pre {
    type filter hook prerouting priority -310;
    ip protocol tcp ip hdrlength gt 5 counter drop
  }
}
table bridge cve98432 {
  chain pre {
    type filter hook prerouting priority -310;
    ip protocol tcp ip hdrlength gt 5 counter drop
  }
}

Getestet: in einer VM mit Debian-Kernel 6.12.113, nftables 1.1.3 und iptables 1.8.11. SYNs mit Record Route oder Timestamp wurden für den Host sowie für gebridgte, VLAN-getaggte und geroutete Gäste verworfen, Verbindungen ohne Optionen liefen durch. nftables 1.0.6 aus Debian 12 und Proxmox VE 8 übersetzt die Regel der Tabelle bridge genauso. Auf einem Proxmox-Kernel haben wir die Regeln nicht getestet.

Dauerhaft laden

Mit nft -f geladen gelten die Regeln nur bis zum nächsten Neustart. Für den Dauerbetrieb gibt es zwei Wege:

systemd/etc/systemd/system/cve-2026-98432-stopgap.service
[Unit]
Description=Stopgap CVE-2026-98432: drop IPv4 TCP packets with IP options
Wants=network-pre.target
Before=network-pre.target shutdown.target
Conflicts=shutdown.target
DefaultDependencies=no

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/nft -f /etc/nftables.d/cve-2026-98432.nft
ExecReload=/usr/sbin/nft -f /etc/nftables.d/cve-2026-98432.nft
ExecStop=-/usr/sbin/nft delete table inet cve98432
ExecStop=-/usr/sbin/nft delete table bridge cve98432

[Install]
WantedBy=sysinit.target
BashUnit aktivieren und sofort laden
systemctl daemon-reload && systemctl enable --now cve-2026-98432-stopgap.service

In /etc/rc.local gehört stattdessen dieser Block vor exit 0. Schlägt er fehl, schreibt er eine Meldung ins Journal und rc.local läuft weiter. Auch unter #!/bin/sh -e bleiben die übrigen Regeln also nicht auf der Strecke:

BashBlock für /etc/rc.local
# CVE-2026-98432 stopgap: drop IPv4 TCP packets with IP options (host, routed and bridged guests)
nft -f - <<'EOF' || logger -t rc.local "CVE-2026-98432 stopgap: nft load failed"
table inet cve98432
delete table inet cve98432
table bridge cve98432
delete table bridge cve98432
table inet cve98432 {
  chain pre {
    type filter hook prerouting priority -310;
    ip protocol tcp ip hdrlength gt 5 counter drop
  }
}
table bridge cve98432 {
  chain pre {
    type filter hook prerouting priority -310;
    ip protocol tcp ip hdrlength gt 5 counter drop
  }
}
EOF

Nicht Debians nftables.service mit der Standarddatei nutzen: /etc/nftables.conf beginnt ab Werk mit flush ruleset, die Unit führt beim Stoppen nft flush ruleset aus. Beides löscht alle nftables-Tabellen, auch die der nftables-basierten Proxmox-Firewall und alle Regeln, die iptables-nft angelegt hat. Eigene Tabellen vertragen sich dagegen mit der Proxmox-Firewall: Laut Proxmox fasst sie nur die Tabellen an, die sie selbst erzeugt. Im Test ließ auch iptables-restore die beiden Tabellen stehen.

Nur mit iptables

Wer seine Regeln mit iptables pflegt, erreicht dasselbe mit der Erweiterung u32. Sie liest das Längenfeld des IPv4-Kopfes, das vorangestellte -C verhindert doppelte Einträge:

Bashiptables, etwa in /etc/rc.local
# CVE-2026-98432 stopgap: drop IPv4 TCP packets with IP options (host and routed guests)
iptables -t raw -C PREROUTING -p tcp -m u32 --u32 "0>>24&0xF=6:15" -j DROP 2>/dev/null || iptables -t raw -I PREROUTING -p tcp -m u32 --u32 "0>>24&0xF=6:15" -j DROP

Praxistest: Greifen die Regeln?

Ob Firewall und Host die Pakete wirklich verwerfen, zeigt ein Test gegen einen offenen TCP-Port. Er baut drei Verbindungen auf: eine ohne Optionen als Gegenprobe, je eine mit Record Route und mit Timestamp. Er braucht nur Python 3 auf einem Linux-Rechner und keine Root-Rechte. Je Variante schickt er nur einen normalen Verbindungsaufbau.

BashAuf dem Prüfrechner, ZIEL-IP und Port ersetzen
python3 - ZIEL-IP 22 <<'EOF'
# Practical test for the CVE-2026-98432 stopgap: does a SYN with IPv4 options reach the service?
import socket, sys
host, port = sys.argv[1], int(sys.argv[2])
OPTIONS = {"none": b"",
           "record-route": bytes([7, 7, 4, 0, 0, 0, 0]),
           "timestamp": bytes([68, 8, 5, 0, 0, 0, 0, 0])}

def probe(opt):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(3)
    if opt:
        s.setsockopt(socket.IPPROTO_IP, socket.IP_OPTIONS, opt)
    try:
        s.connect((host, port))
        return "OPEN"
    except socket.timeout:
        return "DROPPED"
    except ConnectionRefusedError:
        return "REFUSED"
    except OSError as e:
        return "ERROR " + (e.strerror or str(e))
    finally:
        s.close()

res = {name: probe(opt) for name, opt in OPTIONS.items()}
for name, r in res.items():
    print(f"{name:13s} {r}")
with_opts = [r for n, r in res.items() if n != "none"]
if res["none"] != "OPEN":
    print(f"RESULT: INCONCLUSIVE, {host}:{port} accepts no connection even without options")
elif all(r == "DROPPED" for r in with_opts):
    print("RESULT: PROTECTED, SYNs with IP options are dropped on the way")
elif any(r in ("OPEN", "REFUSED") for r in with_opts):
    print("RESULT: NOT PROTECTED, SYNs with IP options reach the target")
else:
    print("RESULT: INCONCLUSIVE, check the lines above")
EOF
ErgebnisBedeutung
PROTECTEDOhne Optionen kommt die Verbindung zustande, mit Optionen verschwindet das SYN unterwegs.
NOT PROTECTEDDas SYN mit Optionen erreicht das Ziel: Es antwortet mit einer Verbindung oder einer Ablehnung.
INCONCLUSIVESchon die Gegenprobe ohne Optionen scheitert. Einen Port wählen, der sonst erreichbar ist.

Was der Test prüft, hängt davon ab, wo der Prüfrechner steht. Für einen vollständigen Blick auf die eigene Infrastruktur lohnen sich alle drei Standorte:

PrüfrechnerPrüftZiele
Im Internet, außerhalb der eigenen Netze, etwa eine Cloud-VMdie ganze Kette aus Firewall und Hostjede öffentliche IP mit freigegebenem Port, etwa 443 oder 25
Im selben Netzsegment wie der Server, also an der Firewall vorbeinur die Regeln auf dem HostSSH und Verwaltungsoberfläche des Hosts, Dienste der Gäste
Ein Gast an derselben Bridge wie andere Gästedie Tabelle bridgeoffene Ports der anderen Gäste

Ein PROTECTED sagt nur, dass das Paket irgendwo verworfen wurde. Wo genau, zeigen die Zähler: auf dem Host die Zeile mit hdrlength, bei Palo Alto Networks show zone-protection zone <Zone>. Steigt kein Zähler, hat ein anderes Netz dazwischen das Paket verworfen. Der Prüfrechner selbst darf deshalb nicht hinter einer Firewall stehen, die IP-Optionen verwirft.

BashAuf dem Zielserver: Regeln geladen, Zähler
echo "rules: $(nft list ruleset | grep -c 'hdrlength > 5') (expected 2)"
nft list ruleset | grep 'hdrlength > 5'
iptables -t raw -L PREROUTING -v -n | grep '0xf=0x6:0xf'   # iptables variant

Weitere Schritte

4.Das Prüfskript cve-2026-98432-check.sh

Wir haben die Prüfungen aus diesem Beitrag in ein Skript gegossen. Es läuft als root, ändert nichts am System und schreibt nur einen Bericht. Im Terminal erscheinen ausschließlich feste Texte, Kernelversionen und Zählwerte; Ports, Adressen und Prozesse stehen nur im Bericht, den nur root lesen kann. So lässt sich die Ausgabe gefahrlos weitergeben.

BashLaden, Prüfsumme prüfen, ausführen
curl -fsSLO https://nokkela.blog/downloads/cve-2026-98432-check.sh
curl -fsSLO https://nokkela.blog/downloads/cve-2026-98432-check.sh.sha256
sha256sum -c cve-2026-98432-check.sh.sha256     # must print: cve-2026-98432-check.sh: OK

sudo bash cve-2026-98432-check.sh

Lesen Sie das Skript vor dem ersten Lauf: Es sind gut 500 Zeilen Bash ohne Abhängigkeiten außer den Bordmitteln von Debian, Ubuntu und Proxmox. So sieht die Ausgabe in unserem Testbett aus, einem Debian-13-Container mit absichtlich gesetzten Funden; der Kernel ist dort der von WSL2 und damit unbekannter Herkunft:

Ausgabecve-2026-98432-check.sh (Testbett mit gesetzten Funden)
### cve-2026-98432-check 1.0.1 (Linux TCP use-after-free), fixed versions as of 2026-10-31
[ INFO ] Platform Debian GNU/Linux 13 (trixie)
[ INFO ] Running kernel 6.6.114.1-microsoft-standard-WSL2 (other)
[ INFO ] Inside a container (docker): this kernel belongs to the host, fix it there

### Kernel
[FAILED] 'Kernel of unknown origin 6.6.114.1-microsoft-standard-WSL2: below the fixed version 6.6.159 upstream, ask its vendor'

### Exposure until the fixed kernel runs
[ INFO ] TCP listeners beyond loopback (IPv4 reaches dual-stack sockets too): 1 (report line 9)
[  OK  ] 'MPTCP disabled or not available'
[FAILED] 'Request socket migration on, second path of the race: 1 (report line 12)'
[ INFO ] nftables rules dropping IPv4 packets with options (stopgap): 1 (report line 15)

### Result
[FAILED] 'Yellow: 2, review and assess'
[ INFO ] Report: /opt/cve-2026-98432-check/reports/report-20261031-073818.txt
[ INFO ] View all details: tail -n +8 /opt/cve-2026-98432-check/reports/report-20261031-073818.txt

Rote Zeilen bedeuten: Der laufende Kernel hat keinen Fix. Gelbe Zeilen sind Einstellungen, die die Angriffsfläche vergrößern, oder ein Kernel, dessen Herkunft das Skript nicht kennt. Der Rückgabewert ist 2 bei Rot, 1 bei Gelb und 0 ohne Funde, damit lässt sich das Skript auch in Ansible oder ein Monitoring einbinden.

PrüfungWas genauBei Fund
Laufender KernelVersion gegen den Fixstand von Debian, Ubuntu (alle angekündigten Kernelvarianten), Proxmox VE oder Upstreamrot; gelb bei unbekannter Herkunft
Installierte KernelIst ein Kernelpaket mit Fix installiert? Dann fehlt nur der Neustart.rot, wenn keines
Gepinnter KernelProxmox: Startet proxmox-boot-tool beim nächsten Mal einen alten Kernel?rot
TCP-ListenerPorts außerhalb von Loopback, mit Prozess (nur im Bericht)Info
MPTCP-Listenerder Weg des veröffentlichten Exploitsgelb
Socket-Migrationnet.ipv4.tcp_migrate_req = 1gelb
Containerlaufende LXC- und Docker-Container auf diesem Kernel; Lauf im Container wird erkanntInfo
Notbehelfnftables-Regel, die IPv4-Pakete mit Optionen verwirftInfo

Grenzen: Das Skript bewertet Versionen, es testet nicht, ob die Lücke ausnutzbar ist. Für Ubuntu vergleicht es mit den angekündigten Fixversionen; erscheint das Update mit anderer Nummer, zählt der Tracker von Ubuntu. Livepatch wertet es nicht aus. Eine Firewall vor dem Server sieht es nicht. Die MPTCP-Prüfung konnten wir mangels MPTCP im Kernel unseres Testbetts nicht mit einem echten Listener testen. Es läuft auf Debian, Ubuntu und Proxmox VE (dpkg); auf der RHEL-Familie gilt der Vergleich sinngemäß mit rpm -q kernel.

Veröffentlichte Erkennungsmerkmale eines Angriffs gibt es zum Stand dieses Beitrags nicht. Kernel-Abstürze (Oops, panic) seit Mitte Oktober auf einem Server mit offenem Port sind aus unserer Sicht ein Grund, genauer hinzusehen.

Häufige Fragen

Was ist CVE-2026-98432?

CVE-2026-98432 ist ein Use-after-free im IPv4-TCP-Handshake des Linux-Kernels, vorhanden seit Linux 4.4 und am 15. Oktober 2026 veröffentlicht. Ein wiederholtes SYN mit IP-Optionen kann dazu führen, dass der Kernel beim Bau des SYN-ACK bereits freigegebenen Speicher liest. Das Kernel-CVE-Team bewertet die Lücke mit CVSS 3.1 9,8, Red Hat mit 8,1. Anthropic hat im Labor einen Exploit gebaut, der auf einem Server mit MPTCP-Listener Root-Rechte erreicht.

Bin ich sicher, wenn meine Dienste über IPv6 laufen?

Native IPv6-Verbindungen sind vom Hauptfehler nicht betroffen, weil der IPv6-Pfad die Optionen kopiert. IPv4-Verbindungen auf Dual-Stack-Sockets, die auf [::] lauschen, laufen im Kernel aber durch den IPv4-Pfad und sind angreifbar. Entscheidend ist, ob ein Dienst per IPv4 erreichbar ist.

Sind Container und virtuelle Maschinen betroffen?

LXC-, Docker- und Kubernetes-Container nutzen den Kernel des Hosts; geschützt sind sie erst, wenn der Host einen gefixten Kernel startet. Ein Update im Container hilft nicht. Virtuelle Maschinen unter KVM, VMware oder Hyper-V haben einen eigenen Kernel und müssen im Gast aktualisiert werden. Dienste hinter einem Reverse Proxy oder CDN sind geschützt, weil der Proxy die TCP-Verbindung beendet; der Proxy selbst bleibt angreifbar.

Welche Kernel sind sicher?

Upstream sind 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 und 7.3 korrigiert. Debian 13 ist ab linux 6.12.113-1 sicher, Debian 12 ab 6.1.190-1 oder linux-6.12 6.12.113-1~deb12u1. Proxmox VE 9 ist ab Kernel 7.0.14-25-pve sicher. Ubuntu hat die Fixversionen für 22.04 bis 26.10 angekündigt, zum 31. Oktober 2026 aber noch nicht freigegeben; die gefixten Kernel für 22.04, 24.04 und 26.04 liegen in -proposed. Nach dem Update muss der Server in den neuen Kernel neu starten.

Hilft es, unter Ubuntu auf einen älteren Kernel wie 7.0.0-38 zu pinnen?

Nein. Der Fehler steckt seit Linux 4.4 im Code, jeder Ubuntu-Kernel unterhalb der Fixversion ist verwundbar, unter 26.04 also 7.0.0-38 ebenso wie 7.0.0-42. Ein älterer Kernel verzichtet zusätzlich auf alle Korrekturen, die seitdem erschienen sind. Den Fix enthält erst 7.0.0-43.43, das zum 31. Oktober 2026 in resolute-proposed liegt; bis zur Freigabe helfen der Notbehelf oder die gezielte Installation des Kernels aus -proposed.

Was mache ich mit Proxmox VE 8?

Proxmox VE 8 bekommt keinen Fix. Der Support endete im August 2026, der letzte Kernel des Zweigs stammt vom 18. August und ist damit älter als der Patch. Der einzige Weg ist das Upgrade auf Proxmox VE 9 mit Kernel 7.0.14-25-pve oder neuer; bis dahin helfen eine Firewall-Regel gegen IPv4-Optionen und ein Verwaltungszugang nur aus dem eigenen Netz.

Schützt meine Firewall vor CVE-2026-98432?

Nur, wenn sie IPv4-Pakete mit IP-Optionen verwirft. Port- und Anwendungsregeln lassen das erste SYN zu einem freigegebenen Port durch. Bei Palo Alto Networks leistet das ein Zone-Protection-Profil mit IP Drop für Timestamp und Record Route an der Internet-Zone, unter Linux eine nftables-Regel mit ip hdrlength gt 5 drop in den Tabellen inet und bridge. Das senkt das Risiko bis zum Patch, ersetzt ihn aber nicht.

Reicht eine Regel auf dem Proxmox-Host für alle Gäste?

Für Verkehr, der über den Host läuft, ja, wenn die Regel in zwei nftables-Tabellen steht: bridge für Gäste an einer Bridge mit physischem Uplink, inet für den Host und für Gäste, die der Host routet. Im Test griff sie auch bei VLAN-getaggten Frames. Verkehr innerhalb eines Containers sieht die Regel nicht. VMs brauchen trotzdem ihr eigenes Kernel-Update.

Wie teste ich, ob der Notbehelf wirkt?

Von einem Prüfrechner aus einen offenen TCP-Port einmal ohne und je einmal mit den IPv4-Optionen Record Route und Timestamp ansprechen. Kommt die Verbindung ohne Optionen zustande und verschwinden die SYNs mit Optionen, wirkt die Regel. Der Beitrag enthält dafür einen fertigen Python-Test ohne Root-Rechte. Wo das Paket verworfen wurde, zeigen die Zähler auf dem Host oder an der Firewall.

Wie prüfe ich meine Server auf CVE-2026-98432?

Der Nokkela-Blog stellt dafür das freie Prüfskript cve-2026-98432-check.sh bereit. Es läuft read-only als root auf Debian, Ubuntu und Proxmox VE, vergleicht laufenden, installierten und gepinnten Kernel mit den Fixständen und prüft MPTCP-Listener, Socket-Migration, Container auf dem Kernel und eine nftables-Regel als Notbehelf. Im Terminal erscheinen nur Versionen und Zählwerte, Ports und Prozesse stehen in einem Bericht, den nur root lesen kann.

Quellen

Externe Quellen, Stand 31. Oktober 2026 (öffnen in einem neuen Tab):

IT-Security mit Nokkela

Patchen, absichern, Cluster sauber neu starten

Sie betreiben Proxmox-Cluster, Container-Hosts oder Linux-Server am Internet und wollen die Lücke schließen, ohne den Betrieb zu stören? Wir prüfen Ihre Systeme, setzen die Firewall-Regeln, planen die Neustarts im Cluster und begleiten das Upgrade von Proxmox VE 8 auf 9, herstellerunabhängig und DSGVO-konform, mit Rechenzentren in Deutschland und Finnland.

Anfrage Mehr zu nokkela.network

Dieser Beitrag dient der allgemeinen Information und ersetzt keine Prüfung im Einzelfall. Versionsstände und Befehle beziehen sich auf den genannten Stand und sind an Ihre Umgebung anzupassen. Das Prüfskript wird unter der BSD-2-Clause-Lizenz ohne Gewähr bereitgestellt. Stand: Oktober 2026.