Author:
Zhou Aiting(@zhouat1) of Qihoo 360 Vulcan Team
0x1. 背景
上个月中旬的思科安全公告显示,一个我们早已发现但还没顾得上提交的RCE漏洞被补了。
编号:CVE-2020-3330,该漏洞是一个逻辑漏洞。漏洞公告细节如下:
0x2. 影响范围
涉及产品型号:Cisco Small Business RV110W Wireless-N VPN Firewall
受影响的固件:< 1.2.2.8
本文讨论版本:1.2.2.5 [2019-12-05 至 2020-06-17]
粗略统计下,全球潜在受影响的公网设备数如下:
0x3. 漏洞挖掘过程
针对 IOT 设备的安全研究,端口扫描属于常规选项,它可以辅助我们快速发现潜在的攻击面。
扫描结果令我们惊讶,默认开启telnet服务!顺藤摸瓜,接下来我们来看看 Cisco 公司的密码强度如何 :)
既然是默认开启telnet服务,那就看看它在哪里开启的。很快定位到一个疑似目标 start_services
undefined4 start_services(void)
{
int iVar1;
int iVar2;
FILE *__stream;
char *__nptr;
char acStack4112 [4096];
__nptr = (char *)nvram_get("lan_ip_mode");
if (__nptr == (char *)0x0) {
__nptr = "";
}
iVar1 = atoi(__nptr);
...
...
if (iVar1 == 2) {
...
}
else {
start_upnp();
start_igd();
start_eapd();
start_nas();
start_zebra();
start_snmp();
start_upnp();
start_wps(0);
start_lltd();
start_telnet(); <--- (1)
}
如果 lan_ip_mode 的值不是字符串 ”2”, 就会进入start_telnet的逻辑。
undefined4 start_telnet(void)
{
char *__s1;
int iVar1;
undefined4 uVar2;
FILE *__s;
char **ppcVar3;
char *local_158;
undefined *local_154;
undefined *local_150;
char *local_14c;
undefined *local_148;
int local_144;
undefined4 local_140;
char *local_13c;
undefined *local_138;
undefined *local_134;
int local_130;
undefined *local_12c;
char *local_128;
undefined *local_124;
int local_120;
undefined4 local_11c;
char acStack280 [256];
__s1 = (char *)nvram_get("telnet_enable"); <--- (2)
if ((__s1 != (char *)0x0) && (iVar1 = strcmp(__s1,"1"), iVar1 != 0)) {
return 0;
}
iVar1 = is_exist("/bin/login");
if (iVar1 == 0) {
__s = fopen("/dev/console","w");
if (__s == (FILE *)0x0) {
uVar2 = 0xffffffff;
}
else {
fwrite("Start telnetd failed! Can\'t find /bin/login!\n",1,0x2d,__s);
fclose(__s);
uVar2 = 0xffffffff;
}
}
else {
__s1 = (char *)nvram_get("telnet_wan_enable");
...
...
start_telnet 的逻辑更简单了,判断只要telnet_enable的值为空或者“1”,就会开启 telnet 服务,否则直接return。
那么lan_ip_mode 、telnet_enable 的值是否满足条件呢?^_^
使用以下命令快速验证下:
在后续的逻辑中,我们发现了admin账户的密码 hash 值,hash算法选择的是md5。
hashcat 刚启动,hash的明文值就已经映入眼帘了,是一个弱密码(*****123)。
0x4. 漏洞利用演示
0x5. 漏洞修复
最新版本固件将start_telnet()函数移除了。
注: 本文发布时,Cisco官方已经修复漏洞、固件也已更新。
Ref: https://www.cisco.com/c/en/us/support/docs/csa/cisco-sa-rv110w-static-cred-BMTWBWTy.html
Comments