内容简介:CVE-2019-1663是Cisco无线VPN和防火墙路由器web管理接口的高危漏洞,影响Cisco RV110W Wireless-N VPN防火墙、Cisco RV130W Wireless-N Multifunction VPN路由器和Cisco RV215W Wireless-N VPN路由器。未认证的远程攻击者利用该漏洞可以在受影响的设备上执行任意代码。根据Cisco的官方声明,该漏洞是由于对web管理接口中用户提供的数据的不适当处理造成的。如果攻击者成功利用该漏洞,就可以发送恶意HTTP请求到
CVE-2019-1663是Cisco无线VPN和防火墙路由器web管理接口的高危漏洞,影响Cisco RV110W Wireless-N VPN防火墙、Cisco RV130W Wireless-N Multifunction VPN路由器和Cisco RV215W Wireless-N VPN路由器。未认证的远程攻击者利用该漏洞可以在受影响的设备上执行任意代码。
根据Cisco的官方声明,该漏洞是由于对web管理接口中用户提供的数据的不适当处理造成的。如果攻击者成功利用该漏洞,就可以发送恶意HTTP请求到目标设备,最终使攻击者以更高权限的用户去执行任意代码。
目前Cisco已经对该漏洞进行了修复,但是修复完就好使吗?
CVE-2019-1663
首先看一下CVE-2019-1663漏洞的起因:
研究人员最早是在RV130路由器上发现该漏洞的,RV130路由器运行的并不是Cisco IOS系统而是嵌入式 Linux 系统。路由器的主要功能是由一些二进制函数处理的,包括处理用户输入和使路由器正常工作。
大多数的用户输入来自于web接口,受影响的二进制文件是httpd webserver二进制文件。实际上该文件只是处理经过80或443端口的所有数据,它获取通过HTTP传输的用户输入,并转换为系统级的配置。
下面看一下CVE-2019-1663漏洞背后的问题机制:
图1 –RV130固件
如果太长的数据传递到login.cgi终端的pwd参数,就会出现缓冲区溢出。这一步是认证之前发生的,下面看一下正常登陆的过程:
到web接口的登陆请求会发送给login.cgi终端,格式如下:
POST /login.cgi HTTP/1.1 Host: 192.168.1.1 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: https://192.168.1.1/ Content-Type: application/x-www-form-urlencoded Content-Length: 137 Connection: close Upgrade-Insecure-Requests: 1 submit_button=login&submit_type=&gui_action=&wait_time=0&change_action=&enc=1&user=cisco&pwd=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&sel_lang=EN
Pwd值实际上是以32字节长的编码密码的形式发送的,该值是在请求发送前通过浏览器中的JS代码计算的。
登陆是由httpd的0x0002C614处的函数处理的。请求参数会从POST请求中进行分析,然后token化之后放在可执行文件的静态数据库(.bss)。
图2 – 从POST请求中取出后内存中的参数
然后,合法编码的密码就会从NVRAM设备中取出,放入内存中。然后,pwd参数的值就会从.bss中取出来,这里使用了标准C调用strcpy将它放入动态分配的内存中。
图3 – *record scratch*.
在正常登陆情况下,每个值都会进行相同的检查。在strcpy将值复制到内存中后,strlen就会计算每个项目的长度,然后strcmp比较两个值。如果所有检查都通过的话,就可以成功登陆。
图4 – 检查长度
那么问题是什么呢?
strcpy
问题就在于strcpy,为什么呢?
图5 – strcpy使用很常见
使用 C语言 编程的开发人员和安全人员请注意:strcpy其实是有个非常危险的函数。网上有上千篇文章解释为什么该函数很危险。下面简单看一下:
首先看一下,在标准的C语言中,strcpy定义如下:
#include <string.h> char *strcpy(char * restrict s1, const char * restrict s2); […]
Strcpy函数会复制s2指向的字符串到s1指向的数组中。如果复制在交叉的对象间发生,这种情况是没有预先定义的。也就是说可能会发生一些意料之外的事情。为什么说strcpy有威胁呢?是因为它会复制s2字符串到s1指向的内存。但是该函数不传递长度,也就是说strcpy函数不关心字符串的长度。对strcpy来说,字符串的长度一点也不重要。复制的过程中可能会产生覆写的情况,而攻击者也正是利用这一潜在漏洞发起攻击,可以覆写栈内保存的返回指针,然后重定向进程的执行流。
下图是在使用strcpy时可能会发生的情况:
图6 – A segfault
在发送下面的请求给RV130时发生的情况就和上面一样:
POST /login.cgi HTTP/1.1 Host: 192.168.22.158 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: https://192.168.22.158/ Connection: close Upgrade-Insecure-Requests: 1 Content-Type: application/x-www-form-urlencoded Content-Length: 571 submit_button=login&submit_type=&gui_action=&default_login=1&wait_time=0&change_action=&enc=1&user=cisco&pwd=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZZZZ&sel_lang=EN
栈中保存的返回指针被“ZZZZ”覆写了,因此执行流会被重定向到0x5A5A5A5A。
研究人员建议使用strlcpy函数,strlcpy是C语言标准库函数,是更加安全版本的 strcpy 函数,在已知目的地址空间大小的情况下,把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的 地址空间 ,并不会造成缓冲区溢出。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Apache Dubbo漏洞补丁绕过
- Rust 1.34.2 发布,安全漏洞补丁
- Rust 1.34.2 发布,安全漏洞补丁
- GCC 7.3 发布,包含变种 Spectre 漏洞补丁
- AKS集群迎来补丁,Kubernetes相关漏洞得到修复
- 微软修复了由 Meltdown 补丁引入的内存错误漏洞
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Software Paradigms
Stephen H. Kaisler / Wiley-Interscience / 2005-03-17 / USD 93.95
Software Paradigms provides the first complete compilation of software paradigms commonly used to develop large software applications, with coverage ranging from discrete problems to full-scale applic......一起来看看 《Software Paradigms》 这本书的介绍吧!
Base64 编码/解码
Base64 编码/解码
MD5 加密
MD5 加密工具