
Exploit de Ejecución Remota de Código previo a la autenticación para el router TP-Link Omada ER605 a través del demonio del cliente DDNS (cmxddnsd)
Cadena de explotación (PoC) dirigida al daemon de cliente DDNS (cmxddnsd) del TP-Link Omada ER605 cuando el dispositivo está configurado para usar el servicio Comexe DDNS.
⚠️ Legal / Ética: Este repositorio es únicamente para investigación de seguridad autorizada y reproducción controlada en laboratorio. No lo utilice contra sistemas que no posea o para los cuales no tenga permiso explícito de pruebas.
Este PoC demuestra un enfoque de encadenamiento que combina:
La cadena corresponde a los siguientes problemas publicados:
| CVE | Aviso ZDI | Tipo (según ZDI/NVD) | Rol de alto nivel en una cadena |
|---|---|---|---|
| CVE-2024-5244 | ZDI-24-503 | Dependencia en seguridad por oscuridad (los mensajes DDNS pueden ser accedidos/suplantados) | Permite crear/suplantar mensajes DDNS con apariencia válida |
| CVE-2024-5243 | ZDI-24-502 | Desbordamiento de búfer en el manejo de nombres DNS | Se usa para influir/envenenar el estado relacionado con nombres DNS y habilitar una ruta de fuga para omitir ASLR |
| CVE-2024-5242 | ZDI-24-501 | Desbordamiento de búfer basado en pila en el manejo de códigos de error DDNS | Se usa como primitiva de secuestro del flujo de control para RCE basada en ROP |
Nota: Este README alinea la CVE ↔ descripción del problema según la redacción de ZDI/NVD. La coreografía exacta del exploit puede variar según la compilación del firmware y los detalles de reproducción local; consulte
exploit.pyy las notas de análisis en este repositorio.
< ER605(UN)_V2_2.2.42.2.2ER605(UN)_V2_2.2.4 Build 20240119 (y posteriores)ZDI describe el impacto como adyacente a la red cuando Comexe DDNS está habilitado/configurado. En la práctica, una reproducción generalmente requiere la capacidad de observar e influir en la ruta de tráfico DDNS/DNS del router lo suficiente como para:
Este repositorio evita intencionalmente proporcionar una guía operativa paso a paso para lograr ese posicionamiento fuera de un laboratorio controlado.
┌─────────────────┐ ┌─────────────────────────┐
│ TP-Link ER605 │ │ Atacante │
│ (cmxddnsd) │ │ (laboratorio autorizado)│
└───────┬─────────┘ └───────────┬─────────────┘
│ │
│ (1) Suplantación/impersonación de msg │ CVE-2024-5244
│<-----------------------------------------│
│ │
│ (2) Desbordamiento en parsing afecta │ CVE-2024-5243
│ estado de nombre DNS; luego ocurre │
│ fuga en ruta de envío de consulta DNS│
│ (ej. sndDnsQuery) para omitir ASLR │
│<-----------------------------------------│
│ │
│ (3) Desbordamiento de código de error │ CVE-2024-5242
│ para secuestro flujo control → ROP │
│ → system(comando) │
│<-----------------------------------------│
Separación clave:
_chkPkt para códigos de error / manejo de nombres DNS).exploit.py — Implementación del PoC utilizada para reproducción en laboratorio (requiere completar constantes/offsets específicos de la compilación).README.md — Este documento.Este PoC requiere valores específicos de la compilación (ej. offsets, ubicaciones de gadgets, interpretación de la fuga) que dependen del firmware objetivo y la libc. Estos valores se dejan intencionalmente como marcadores de posición y deben derivarse mediante análisis de la compilación probada.
Ejemplos de marcadores (ver exploit.py):
system()Un antipatrón recurrente en la lógica de parsing es copiar datos de campo controlados por el atacante usando una longitud derivada de un delimitador sin limitarla adecuadamente al tamaño del búfer de destino (conceptualmente):
char *end = strchr(ptr, '\x01'); // delimitador
int len = end - ptr; // longitud influenciada por atacante
memcpy_or_strncpy(dest, ptr, len); // falta verificación de límites -> desbordamiento
El PoC utiliza una forma de gadget compatible con delay slots MIPS:
move $t9, $s0
jalr $t9
move $a0, $s1 ; delay slot
Al controlar $s0 y $s1 mediante sobrescritura de registros guardados, esto permite una secuencia compacta de llamada system(comando).
La construcción práctica del payload está restringida por:
\x01), yConsulte exploit.py para conocer las restricciones exactas utilizadas en esta reproducción.
Este código y documentación se proporcionan con fines educativos e investigación de seguridad autorizada únicamente. Cualquier uso sin permiso explícito está prohibido y puede ser ilegal.