当前位置:首页 > seo技术分享 > 正文

Nginx敏感信息泄露漏洞(CVE-2017-7529)分析

今天小凯seo博客转载来自百度安全指数的一篇关于Nginx敏感信息泄漏漏洞的分析报告,为了修复整数溢出漏洞(CVE-2017-7529), Nginx官方发布了nginx-1.12.1 stable和nginx-1.13.3 mainline版本,并且提供了官方patch。

Nginx敏感信息泄露漏洞(CVE-2017-7529)分析

2017年7月11日,Nginx官方发布最新的安全公告,在Nginx范围过滤器中发现了一个安全问题(CVE-2017-7529),通过精心构造的恶意请求可能会导致整数溢出并且不正确处理范围,从而导致敏感信息泄漏。当使用Nginx标准模块时,如果文件头从缓存返回响应,允许攻击者获取缓存文件头。在某些配置中,缓存文件头可能包含后端服务器IP地址或其他敏感信息。此外,如果使用第三方模块有潜在的可能导致拒绝服务。

二、漏洞描述&影响

Integer overflow in the range filter

Severity: medium

当使用Nginx并且开启缓存功能时,攻击者可以构造特定header头字段,能越界读取到缓存文件的文件头信息。文件头信息中可能会包含Nginx代理站点的真实IP,造成敏感信息泄露。

另外,一些第三方模块可能会因此导致拒绝服务或者当前进程的内存泄漏,但Nginx官方暂未发现这样的第三方模块。

此漏洞涉及了nginx 0.5.6 – 1.13.2全版本。

此漏洞需要在Nginx用作代理缓存的情况下才能触发,如基于Nginx的CDN服务等。

当缓存的设置如下时,也不会泄露后台的IP信息。

Nginx敏感信息泄露漏洞(CVE-2017-7529)分析01
三、漏洞细节

首先从patch定位问题,src/http/modules/ngx_http_range_filter_module.c(range过滤模块)

Nginx敏感信息泄露漏洞(CVE-2017-7529)分析02
官方patch了两个地方,一个避免range start 为负值,一个保护整形size不被溢出。

Nginx敏感信息泄露漏洞(CVE-2017-7529)分析03
通过patch的文档意见函数逻辑可以看出,如果使用 bytes=-100进入if(suffix),end设置一个大于缓存文件大小的值,会导致start 为负值。

Nginx敏感信息泄露漏洞(CVE-2017-7529)分析04
size 一直累加,最后size 有个判断, size 需要一个特别大的值构成size 累加为负值。
Nginx敏感信息泄露漏洞(CVE-2017-7529)分析05
因此,我们可以构造 range:bytes=-xx,-xx,-xx,-xx构造成size有符号整形溢出为负值。在GDB里构造请求调试进行验证:
Nginx敏感信息泄露漏洞(CVE-2017-7529)分析06
size 累加成一个负值。
Nginx敏感信息泄露漏洞(CVE-2017-7529)分析07
可以获取缓存文件的key。这里启用了以下配置,因此获取不到真实的IP地址。
Nginx敏感信息泄露漏洞(CVE-2017-7529)分析08
四、修复

1、升级Nginx到最新无漏洞版本,当前1.13.3,1.12.1版本中已修复了这个问题;

2、临时方案:配置 max_ranges 1;

3、使用百度云加速WAF防火墙进行防御;

4、添加网站至安全指数,及时了解网站组件突发/0day漏洞。

评论已关闭!