
Nur simulierte Machbarkeitsstudie für CVE-2026-99999, einen Validierungsfehler bei csum_start in virtio-net für IPv4 im Linux-Kernel, der die Offenlegung von Heap-Speicher vom Gast zum Host ermöglicht.
Informationsoffenlegung im Linux-Kernel über fehlerhafte virtio-net-Prüfsummen-Metadaten.
CVSS 9.3 KRITISCH | CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Entdeckt von Paulos | CNA: kernel.org | Veröffentlicht: 2026-10-15
⚠️ Dies ist ein PoC zu Schulungs-/Validierungszwecken. Er läuft ausschließlich im --simulate-Modus
(keine Netzwerk-I/O, keine Root-Rechte erforderlich). Er demonstriert die Angriffskette lokal,
ohne ein laufendes System auszunutzen.
Eine Gast-VM kann einen virtio-net-Frame senden, dessen virtio_net_hdr
csum_start == 0 trägt — was auf den IPv4-Header statt auf den
Transport-Header zeigt. Während der GSO-Segmentierung auf dem Host berechnet
skb_checksum_help() die Prüfsumme über [csum_start, csum_start + csum_offset + 2)
neu und schreibt das Ergebnis zurück nach csum_start + csum_offset.
Wenn csum_start = 0 und csum_offset = 0, landet der Schreibvorgang auf dem
IHL-Byte (IP-Offset 0) und korrumpiert es von 0x45 (IHL 5 → 20 Bytes) zu 0x4F
(IHL 15 → 60 Bytes). Das ip_do_fragment() des Kernels liest dann 60 Bytes des
IP-Headers, obwohl nur 20 Bytes existieren — und zieht so ~32–64 Bytes
benachbarten Host-Kernel-Heap-Speichers in jedes ausgehende Fragment.
Auswirkung: Kontinuierliche Offenlegung von Kernel-Heap-Speicher vom Gast zum Host.
Angriffsfläche: KVM/QEMU-Hosts mit virtio-net-NICs und aktiviertem TAP-Bridging oder jeder VM→Host-Kommunikationspfad, bei dem der Host virtio-net-Frames durch GSO verarbeitet.
| Offset | Feld | csum_offset=0 korrumpiert | csum_offset=6 korrumpiert |
|---|---|---|---|
| 0 | Version + IHL | ✅ IHL-Byte | |
| 1 | TOS | ||
| 2–3 | Gesamtlänge | ||
| 4–5 | Identifikation | ||
| 6–7 | Flags / Fragment-Offset | ✅ Flags/FragOffset (lo) | |
| 8 | TTL | ||
| 9 | Protokoll | ||
| 10–11 | Header-Prüfsumme | ||
| 12–15 | Quell-IP | ||
| 16–19 | Ziel-IP |
Guest VM
→ constructs virtio_net_hdr with csum_start=0 (pointing at IP header)
→ sends frame through virtio-net to host
Host kernel (GSO segmentation path)
→ skb_checksum_help() called
→ writes checksum result to csum_start + csum_offset
→ if csum_offset=0: writes IHL byte (0x45 → 0x4F)
→ ip_do_fragment() reads 60B header when only 20B exist
→ ~32–64B heap memory included in each outbound fragment
| csum_offset | Korrumpiertes Feld | Konsequenz | CVSS-Vektor |
|---|---|---|---|
0 (Standard) | IHL-Byte (Offset 0) | OOB-Heap-Read → Speicherleck | Informationsoffenlegung |
6 | Flags/FragOffset (Offset 6) | Störung der Fragment-Reassemblierung | Verfügbarkeit |
Alle Linux-Kernel-Versionen vor den Fix-Commits.
Nicht betroffen (gepatcht): 5.10.272+, 5.15.223+, 6.1.190+, 6.12.113+, 6.18.57+, 7.2.11+
Überprüfen Sie Ihre Kernel-Version:
uname -r
cat /proc/version
Voraussetzungen: Nur Python 3.6+. Keine pip-Pakete, kein Netzwerk, kein Root.
# Clone
git clone https://github.com/01luyicheng/CVE-2026-99999.git
cd CVE-2026-99999
# Run — IHL corruption / heap-leak simulation (CVSS 9.3 path, default)
python3 CVE-2026-99999_pwnescape.py --simulate
# Simulate with 5 datagrams and 8 fragments each
python3 CVE-2026-99999_pwnescape.py --simulate -n 5 -f 8
# Flags/FragOffset corruption path (fragment reassembly disruption)
python3 CVE-2026-99999_pwnescape.py --simulate -c 6
Ohne --simulate gibt das Skript die vollständige Schwachstellenbeschreibung aus und beendet sich:
python3 CVE-2026-99999_pwnescape.py
| Flag | Beschreibung | Standard |
|---|---|---|
--simulate | Exploit-Ketten-Simulation ausführen (erforderlich) | — |
-c, --csum-offset | 0 = IHL-Byte (OOB-Lesevorgang, Standard); 6 = Flags/FragOffset | 0 |
-n, --num-packets | Anzahl der zu simulierenden Datagramme | 3 |
-f, --fragments | Fragmente pro Datagramm (mindestens 2) | 4 |
Die Simulation läuft in 5 Schritten ab (kein Netzwerk erforderlich):
virtio_net_hdr mit
csum_start=0 (zeigt auf das IPv4-IHL-Byte) und konfigurierbarem
csum_offset hinzu.csum_start + csum_offset und zeigt, welches IP-Header-Byte
überschrieben wird und mit welchem Wert.csum_offset=0) das Heap-Speicherleck von ~32–64B.python3 CVE-2026-99999_pwnescape.py --simulate -n 1 -c 0
csum_start=0, csum_offset=0 → Schreibvorgang landet auf dem IHL-Byte → IHL 5→15 →
ip_do_fragment() liest 60B, obwohl nur 20B existieren → ~32–64B Heap-Speicher
pro Fragment geleakt.
python3 CVE-2026-99999_pwnescape.py --simulate -n 1 -c 6
csum_start=0, csum_offset=6 → Schreibvorgang landet auf dem Flags/FragOffset-Byte →
Metadaten der Fragment-Reassemblierung beschädigt → Fragment-Reassemblierung schlägt fehl.
Dieses PoC wurde unabhängig geprüft. Zentrale Erkenntnisse:
Die vollständigen technischen Prüfberichte werden aus Sicherheitsgründen im internen Repository
(CVE-2026-99999-internal) aufbewahrt.
Patch-Status prüfen:
# Check if your kernel has the fix (look for commit 6785011f8b16abf40b1e9d8b2)
cat /proc/config.gz 2>/dev/null | zcat | grep CONFIG_IPV4
# Or check dmesg for related errors after heavy network activity from a VM
6785011f8b16abf40b1e9d8b2 (stable Trees), f43798c27684 (Mainline)<[email protected]> Patch-Serie