补丁也不好使,CVE-2019-1663漏洞利用仍然在继续

栏目: 编程工具 · 发布时间: 7年前

内容简介: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路由器。未认证的远程攻击者利用该漏洞可以在受影响的设备上执行任意代码。

补丁也不好使,CVE-2019-1663漏洞利用仍然在继续

根据Cisco的官方声明,该漏洞是由于对web管理接口中用户提供的数据的不适当处理造成的。如果攻击者成功利用该漏洞,就可以发送恶意HTTP请求到目标设备,最终使攻击者以更高权限的用户去执行任意代码。

目前Cisco已经对该漏洞进行了修复,但是修复完就好使吗?

CVE-2019-1663

首先看一下CVE-2019-1663漏洞的起因:

研究人员最早是在RV130路由器上发现该漏洞的,RV130路由器运行的并不是Cisco IOS系统而是嵌入式 Linux 系统。路由器的主要功能是由一些二进制函数处理的,包括处理用户输入和使路由器正常工作。

大多数的用户输入来自于web接口,受影响的二进制文件是httpd webserver二进制文件。实际上该文件只是处理经过80或443端口的所有数据,它获取通过HTTP传输的用户输入,并转换为系统级的配置。

下面看一下CVE-2019-1663漏洞背后的问题机制:

补丁也不好使,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)。

补丁也不好使,CVE-2019-1663漏洞利用仍然在继续

图2 – 从POST请求中取出后内存中的参数

然后,合法编码的密码就会从NVRAM设备中取出,放入内存中。然后,pwd参数的值就会从.bss中取出来,这里使用了标准C调用strcpy将它放入动态分配的内存中。

补丁也不好使,CVE-2019-1663漏洞利用仍然在继续

图3 – *record scratch*.

在正常登陆情况下,每个值都会进行相同的检查。在strcpy将值复制到内存中后,strlen就会计算每个项目的长度,然后strcmp比较两个值。如果所有检查都通过的话,就可以成功登陆。

补丁也不好使,CVE-2019-1663漏洞利用仍然在继续

图4 – 检查长度

那么问题是什么呢?

strcpy

问题就在于strcpy,为什么呢?

补丁也不好使,CVE-2019-1663漏洞利用仍然在继续

图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时可能会发生的情况:

补丁也不好使,CVE-2019-1663漏洞利用仍然在继续

图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开始的 地址空间 ,并不会造成缓冲区溢出。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Blockchain Basics

Blockchain Basics

Daniel Drescher / Apress / 2017-3-16 / USD 20.99

In 25 concise steps, you will learn the basics of blockchain technology. No mathematical formulas, program code, or computer science jargon are used. No previous knowledge in computer science, mathema......一起来看看 《Blockchain Basics》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换