
CVE-2026-46331 and CVE-2026-43503
3 exploits d'élévation de privilèges locaux du noyau Linux. Même classe de bug que Dirty COW et Dirty Pipe. Shell root en quelques secondes. Toutes les distributions majeures sont concernées.
Les trois corrompent le cache de pages du noyau — la copie en mémoire des fichiers que les processus lisent et exécutent réellement. Le fichier sur disque n'est jamais touché. Les outils d'intégrité de fichiers ne voient rien. execve("/usr/bin/su") charge depuis le cache → exécute votre shellcode → root.
| Exploit | CVE | Mécanisme | Temps pour root | Lignes |
|---|---|---|---|---|
| Dirty Pedit | CVE-2026-46331 | Faille COW de TC pedit (débordement u32) | < 1 seconde | 275 |
| skb_shift | CVE-2026-43503 | Perte du flag de transfert de fragments lors de TCP SACK | ~10 secondes | 500 |
| GRO Flag Loss | CVE-2026-43503 | Perte du flag de transfert de fragments lors de la coalescence GRO | ~10 secondes | 550 |
Les trois : non privilégié → root. Aucune permission spéciale. Uniquement des espaces de noms utilisateur.
Chaque exploit de ce dépôt suit le même schéma :
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
Ce qui diffère, c'est comment la défense est contournée et ce qui effectue l'écriture :
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
Configurations par défaut. Aucun durcissement nécessaire pour être vulnérable. Si vous utilisez Linux, vous étiez concerné.
skb_shift et GRO utilisent tous deux la même technique d'exploitation : perdre le flag SKBFL_SHARED_FRAG, puis laisser la crypto ESP faire un XOR dans les pages du cache de pages, un octet à la fois, à l'aide d'une table de correspondance IV précalculée.
Dirty Pedit est un tout autre animal :
skb_store_bits.skb_ensure_writable par débordement d'entier.# 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 ..
Chaque exploit est un fichier C unique et autonome. Aucune dépendance au-delà de libc.
# Any of the three (as unprivileged user):
./exploit
# → root shell
Prérequis : noyau Linux dans la plage de versions concernée + CONFIG_USER_NS=y (par défaut sur toutes les distributions majeures).
[*] 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
Toutes les vulnérabilités ont été divulguées de manière responsable à l'équipe de sécurité du noyau Linux et aux mainteneurs réseau. Les correctifs sont fusionnés en amont et rétroportés vers les arbres stables.
899ee91156e548f6a5356a33Ces exploits sont publiés à des fins éducatives et défensives, une fois les correctifs disponibles. La corruption du cache de pages est limitée à la mémoire — un redémarrage ou echo 1 > /proc/sys/vm/drop_caches restaure les fichiers d'origine.
Rajat Gupta — Offensive Security @ Qualcomm
MIT
| Exploit | Défense contournée | Écrivain |
|---|
| Dirty Pedit | skb_ensure_writable (débordement u32 → COW partiel) | skb_store_bits (écriture directe de 4 octets) |
| skb_shift | flag SKBFL_SHARED_FRAG perdu lors de TCP SACK | déchiffrement ESP AES-GCM (1 octet par paquet) |
| GRO Flag Loss | flag SKBFL_SHARED_FRAG perdu lors d'une fusion GRO | déchiffrement ESP AES-GCM (1 octet par paquet) |
| Exploit | Introduit | Corrigé | Distributions concernées |
|---|
| Dirty Pedit | v5.18 (mai 2022) | v7.1-rc7 | Ubuntu, RHEL, Debian, Fedora, SUSE |
| skb_shift | v3.9 (2013) | v7.1-rc5 | Toutes les distributions depuis 13 ans |
| GRO Flag Loss | v3.9 (2013) | v7.1-rc5 | Toutes les distributions depuis 13 ans |
| Propriété | Dirty Pedit | skb_shift | GRO |
|---|
| Privilèges | Aucun (userns) | Aucun (userns) | Aucun (userns) |
| Accès fichier | O_RDONLY | O_RDONLY | O_RDONLY |
| Crypto requise | Non | Oui (AES-GCM) | Oui (AES-GCM) |
| Contrôle d'écriture | 4 octets/paquet | 1 octet/paquet | 1 octet/paquet |
| Fiabilité | Déterministe | Déterministe | Probabiliste (réessai) |
| Évasion de conteneur K8s | Non (pas de veth nécessaire) | Non | Oui (veth+GRO par défaut) |
| Surface d'attaque | geneve + TC | loopback + espintcp | veth + ESP-in-UDP |