思科CVE-2019-1663补丁失效清静通告
宣布时间 2019-03-06误差编号和级别
CVE编号: CVE-2019-1663,危险级别:严重, CVSS分值:厂商自评:9.8,官方未评定
影响规模
受影响版本:
RV110W Wireless-N VPN Firewall
RV130W Wireless-N Multifunction VPN Router
RV215W Wireless-N VPN Router
误差概述
思科宣布清静通告,体现其企业无线VPN和防火墙路由器保存严重清静误差。误差爆发是由于在基于web的管理界面中对用户提供的数据举行了过失的验证。允许攻击者通过向目的装备发送恶意HTTP请求,然后以高权限用户的身份在受影响装备的底层操作系统上执行恣意代码。
思科体现该误差已经保存六个月,现在已宣布补丁,可是发明补丁失效,误差使用仍然在继续。
误差细节
首先看一下CVE-2019-1663误差的因由:
研究职员最早是在RV130路由器上发明该误差的,RV130路由器运行的并不是Cisco IOS系统而是嵌入式Linux系统。路由器的主要功效是由一些二进制函数处置惩罚的,包括处置惩罚用户输入和使路由器正常事情。
大大都的用户输入来自于web接口,受影响的二进制文件是httpd webserver二进制文件。现实上该文件只是处置惩罚经由80或443端口的所有数据,它获取通过HTTP传输的用户输入,并转换为系统级的设置。
下面看一下CVE-2019-1663误差背后的问题机制:
RV130固件
若是太长的数据转达到login.cgi终端的pwd参数,就会泛起缓冲区溢出。这一步是认证之前爆发的,下面看一下正常上岸的历程:
到web接口的上岸请求会发送给login.cgi终端,名堂如下:
Pwd值现实上是以32字节长的编码密码的形式发送的,该值是在请求发送前通过浏览器中的JS代码盘算的。
上岸是由httpd的0x0002C614处的函数处置惩罚的。请求参数会从POST请求中举行剖析,然后token化之后放在可执行文件的静态数据库(.bss)。
从POST请求中取出后内存中的参数
然后,正当编码的密码就会从NVRAM装备中取出,放入内存中。然后,pwd参数的值就会从.bss中取出来,这里使用了标准C挪用strcpy将它放入动态分派的内存中。
*record scratch*.
在正常上岸情形下,每个值都会举行相同的检查。在strcpy将值复制到内存中后,strlen就会盘算每个项目的长度,然后strcmp较量两个值。若是所有检查都通过的话,就可以乐成上岸。
检查长度
问题就在于strcpy。
strcpy使用很常见
使用C语言编程的开发职员和清静职员请注重:strcpy着实是有个很是危险的函数。网上有上千篇文章诠释为什么该函数很危险。下面简朴看一下:
首先看一下,在标准的C语言中,strcpy界说如下:
Strcpy函数会复制s2指向的字符串到s1指向的数组中。若是复制在交织的工具间爆发,这种情形是没有预先界说的。也就是说可能会爆发一些意料之外的事情。为什么说strcpy有威胁呢?是由于它会复制s2字符串到s1指向的内存。可是该函数不转达长度,也就是说strcpy函数不体贴字符串的长度。对strcpy来说,字符串的长度一点也不主要。复制的历程中可能会爆发覆写的情形,而攻击者也正是使用这一潜在误差提倡攻击,可以覆写栈内生涯的返回指针,然后重定向历程的执行流。
下图是在使用strcpy时可能会爆发的情形:
A segfault
在发送下面的请求给RV130时爆发的情形就和上面一样:
栈中生涯的返回指针被“ZZZZ”覆写了,因此执行流会被重定向到0x5A5A5A5A。
研究职员建议使用strlcpy函数,strlcpy是C语言标准库函数,是越发清静版本的strcpy函数,在已知目的地址空间巨细的情形下,把从src地址最先且含有'\0'竣事符的字符串复制到以dest最先的地址空间,并不会造成缓冲区溢出。
修复建议
思科之前已宣布补丁,可是发明补丁失效, 请亲近关注官网更新。
参考链接
https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190227-rmi-cmd-ex#fr
https://www.pentestpartners.com/security-blog/cisco-rv130-its-2019-but-yet-strcpy/


京公网安备11010802024551号