
CVE-2026-46331 and CVE-2026-43503
3 Exploits zur lokalen Privilegienerweiterung im Linux-Kernel. Dieselbe Bug-Klasse wie Dirty COW und Dirty Pipe. Root-Shell in Sekunden. Jede große Distribution betroffen.
Alle drei korrumpieren den Page-Cache des Kernels – die In-Memory-Kopie von Dateien, die Prozesse tatsächlich lesen und ausführen. Die Datei auf der Festplatte wird nie angefasst. Dateiintegritätstools sehen nichts. execve("/usr/bin/su") lädt aus dem Cache → führt deinen Shellcode aus → root.
| Exploit | CVE | Mechanismus | Zeit bis Root | Zeilen |
|---|---|---|---|---|
| Dirty Pedit | CVE-2026-46331 | TC-pedit-COW-Lücke (u32-Wraparound) | < 1 Sekunde | 275 |
| skb_shift | CVE-2026-43503 | Verlust des Transfer-Flags bei TCP-SACK-Fragmenten | ~10 Sekunden | 500 |
| GRO Flag Loss | CVE-2026-43503 | Verlust des Transfer-Flags bei GRO-Coalesce-Fragmenten | ~10 Sekunden | 550 |
Alle drei: unprivilegiert → root. Keine speziellen Berechtigungen. Nur User Namespaces.
Jeder Exploit in diesem Repo folgt demselben Muster:
1. Get page-cache pages into a kernel buffer (splice)
2. Bypass the copy-on-write defense
3. Write in-place → read-only file corrupted in memory
Was sich unterscheidet, ist WIE die Verteidigung umgangen wird und WAS den Schreibvorgang ausführt:
2016 Dirty COW COW race via mmap + fork
2022 Dirty Pipe Stale PIPE_BUF_FLAG_CAN_MERGE in splice
2026 Copy Fail AF_ALG in-place AEAD on page-cache scatterlist
2026 Dirty Frag ESP skip_cow on splice'd frags (missing flag)
2026 Fragnesia skb_try_coalesce drops SHARED_FRAG flag
2026 Dirty Pedit ← TC pedit COW gap, no crypto needed
2026 skb_shift ← TCP SACK drops SHARED_FRAG, ESP writes
2026 GRO Flag Loss ← GRO merge drops SHARED_FRAG, ESP writes
Standardkonfigurationen. Keine Härtung nötig, um verwundbar zu sein. Wenn du Linux betreibst, warst du betroffen.
skb_shift und GRO verwenden beide dieselbe Exploitationstechnik: das SKBFL_SHARED_FRAG-Flag verlieren und dann ESP-Krypto mithilfe einer vorberechneten IV-Nachschlagetabelle Byte für Byte in Page-Cache-Seiten XORen lassen.
Dirty Pedit ist etwas völlig anderes:
skb_store_bits angibst.skb_ensure_writable durch Integer-Wraparound.# Build all three
cd dirty_pedit && gcc -static -O2 -o exploit exploit.c && cd ..
cd skb_shift && gcc -static -O2 -o exploit exploit.c && cd ..
cd gro && gcc -static -O2 -o exploit exploit.c && cd ..
Jeder Exploit ist eine einzelne, in sich geschlossene C-Datei. Keine Abhängigkeiten außer libc.
# Any of the three (as unprivileged user):
./exploit
# → root shell
Erfordert: Linux-Kernel im betroffenen Versionsbereich + CONFIG_USER_NS=y (Standard auf allen großen Distributionen).
[*] Dirty Pedit — Local Privilege Escalation
[*] uid=1000 pid=42
[*] Victim line at offset 186: nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
[*] Injecting user 'a' (uid=0, no password) over victim line...
[+] User 'a' injected with uid=0!
[+] Running: su a
# id
uid=0(root) gid=0(root) groups=0(root)
[*] uid=1000 euid=1000
[*] IV table pre-computed (256 entries)
[*] Writing 192 bytes to /usr/bin/su...
[120] 0x00→0x48 ... OK
[121] 0x00→0x31 ... OK
[*] Write complete: 192/192
[!] /usr/bin/su page cache overwritten!
# whoami
root
Alle Schwachstellen wurden dem Linux-Kernel-Sicherheitsteam und den Netzwerk-Maintainern verantwortungsvoll gemeldet. Die Patches wurden upstream gemerged und in stabile Zweige zurückportiert.
899ee91156e548f6a5356a33Diese Exploits werden zu Bildungs- und Verteidigungszwecken veröffentlicht, nachdem Patches verfügbar waren. Page-Cache-Korruption wirkt nur im Speicher — ein Neustart oder echo 1 > /proc/sys/vm/drop_caches stellt die ursprünglichen Dateien wieder her.
Rajat Gupta — Offensive Security @ Qualcomm
MIT
| Exploit | Umgangene Verteidigung | Schreiber |
|---|
| Dirty Pedit | skb_ensure_writable (u32-Wraparound → partielle COW) | skb_store_bits (direkter 4-Byte-Schreibvorgang) |
| skb_shift | SKBFL_SHARED_FRAG-Flag während TCP-SACK verloren | ESP-AES-GCM-Entschlüsselung (1 Byte pro Paket) |
| GRO Flag Loss | SKBFL_SHARED_FRAG-Flag während GRO-Merge verloren | ESP-AES-GCM-Entschlüsselung (1 Byte pro Paket) |
| Exploit | Eingeführt | Behoben | Betroffene Distributionen |
|---|
| Dirty Pedit | v5.18 (Mai 2022) | v7.1-rc7 | Ubuntu, RHEL, Debian, Fedora, SUSE |
| skb_shift | v3.9 (2013) | v7.1-rc5 | Jede Distribution seit 13 Jahren |
| GRO Flag Loss | v3.9 (2013) | v7.1-rc5 | Jede Distribution seit 13 Jahren |
| Eigenschaft | Dirty Pedit | skb_shift | GRO |
|---|
| Berechtigungen | Keine (userns) | Keine (userns) | Keine (userns) |
| Dateizugriff | O_RDONLY | O_RDONLY | O_RDONLY |
| Krypto nötig | Nein | Ja (AES-GCM) | Ja (AES-GCM) |
| Schreibkontrolle | 4 Bytes/Paket | 1 Byte/Paket | 1 Byte/Paket |
| Zuverlässigkeit | Deterministisch | Deterministisch | Probabilistisch (Wiederholung) |
| K8s-Containerausbruch | Nein (kein veth nötig) | Nein | Ja (veth+GRO standard) |
| Angriffsfläche | geneve + TC | loopback + espintcp | veth + ESP-in-UDP |