
CVE-2026-46331 y CVE-2026-43503
3 exploits de escalada local de privilegios del kernel de Linux. Misma clase de bug que Dirty COW y Dirty Pipe. Shell root en segundos. Todas las principales distros afectadas.
Los tres corrompen la caché de páginas del kernel — la copia en memoria de los archivos que los procesos realmente leen y ejecutan. El archivo en disco nunca se toca. Las herramientas de integridad de archivos no ven nada. execve("/usr/bin/su") se carga desde la caché → ejecuta tu shellcode → root.
| Exploit | CVE | Mecanismo | Tiempo hasta root | Líneas |
|---|---|---|---|---|
| Dirty Pedit | CVE-2026-46331 | Hueco COW de TC pedit (wrap-around u32) | < 1 segundo | 275 |
| skb_shift | CVE-2026-43503 | Pérdida de flag de transferencia de frag en TCP SACK | ~10 segundos | 500 |
| GRO Flag Loss | CVE-2026-43503 | Pérdida de flag de transferencia de frag en la fusión GRO | ~10 segundos | 550 |
Los tres: no privilegiado → root. Sin permisos especiales. Solo user namespaces.
Cada exploit en este repositorio sigue el mismo patrón:
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
Lo que difiere es CÓMO se evade la defensa y QUÉ realiza la escritura:
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
Configuraciones por defecto. Sin endurecimiento necesario para ser vulnerable. Si usas Linux, estabas afectado.
skb_shift y GRO usan la misma técnica de explotación: pierden el flag SKBFL_SHARED_FRAG, y luego dejan que la criptografía ESP haga XOR en las páginas de la caché un byte a la vez usando una tabla de búsqueda IV precomputada.
Dirty Pedit es una bestia completamente diferente:
skb_store_bits.skb_ensure_writable mediante wrap-around de enteros.# 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 ..
Cada exploit es un único archivo C autocontenido. Sin dependencias más allá de libc.
# Any of the three (as unprivileged user):
./exploit
# → root shell
Requiere: kernel de Linux en el rango de versiones afectado + CONFIG_USER_NS=y (por defecto en todas las distros principales).
[*] 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
Todas las vulnerabilidades fueron divulgadas de manera responsable al equipo de seguridad del kernel de Linux y a los mantenedores de redes. Los parches están fusionados upstream y retroportados a los árboles estables.
899ee91156e548f6a5356a33Estos exploits se publican con fines educativos y defensivos después de que los parches estuvieran disponibles. La corrupción de la caché de páginas es solo memoria — reiniciar o echo 1 > /proc/sys/vm/drop_caches restaura los archivos originales.
Rajat Gupta — Seguridad Ofensiva @ Qualcomm
MIT
| Exploit | Defensa evadida | Escritor |
|---|
| Dirty Pedit | skb_ensure_writable (wrap-around u32 → COW parcial) | skb_store_bits (escritura directa de 4 bytes) |
| skb_shift | flag SKBFL_SHARED_FRAG perdido durante TCP SACK | Descifrado ESP AES-GCM (1 byte por paquete) |
| GRO Flag Loss | flag SKBFL_SHARED_FRAG perdido durante la fusión GRO | Descifrado ESP AES-GCM (1 byte por paquete) |
| Exploit | Introducido | Corregido | Distros afectadas |
|---|
| Dirty Pedit | v5.18 (mayo de 2022) | v7.1-rc7 | Ubuntu, RHEL, Debian, Fedora, SUSE |
| skb_shift | v3.9 (2013) | v7.1-rc5 | Todas las distros durante 13 años |
| GRO Flag Loss | v3.9 (2013) | v7.1-rc5 | Todas las distros durante 13 años |
| Propiedad | Dirty Pedit | skb_shift | GRO |
|---|
| Privilegios | Ninguno (userns) | Ninguno (userns) | Ninguno (userns) |
| Acceso a archivo | O_RDONLY | O_RDONLY | O_RDONLY |
| Criptografía necesaria | No | Sí (AES-GCM) | Sí (AES-GCM) |
| Control de escritura | 4 bytes/paquete | 1 byte/paquete | 1 byte/paquete |
| Fiabilidad | Determinista | Determinista | Probabilística (reintento) |
| Escape de contenedor K8s | No (no se necesita veth) | No | Sí (veth+GRO por defecto) |
| Superficie de ataque | geneve + TC | loopback + espintcp | veth + ESP-in-UDP |