思科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号