漏洞概述:
2017年7月11日,Nginx在官方公告中称发现了一个范围过滤器中的安全问题,并分配了CVE-2017-7529。通过精心构造的恶意请求能造成整数溢出,对范围值的不当处理会导致敏感信息泄漏。当使用Nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header请求,来获取响应中的缓存文件头部信息。在某些配置中,缓存文件头可能包含后端服务器的IP地址或其它敏感信息,从而导致信息泄露。
Nginx在反向代理站点的时候,通常会将一些文件进行缓存,特别是静态文件。 缓存的部分存储在文件中,每个缓存文件包括“文件头”+“HTTP返回包头”+ “HTTP返回包体”。如果二次请求命中了该缓存文件,则Nginx会直接将该文件中 的“HTTP返回包体”返回给用户。如果我的请求中包含Range头,Nginx将会根据我 指定的start和end位置,返回指定长度的内容。而如果我构造了两个负的位置, 如(-600, -9223372036854774591),将可能读取到负位置的数据。如果这次请 求又命中了缓存文件,则可能就可以读取到缓存文件中位于“HTTP返回包体”前的 “文件头”、“HTTP返回包头”等内容。
漏洞条件:
Nginx version 0.5.6 - 1.13.2
该漏洞影响所有0.5.6 - 1.13.2版本内默认配置模块的Nginx只需要开启缓,存攻击者即可发送恶意请求进行远程攻击造成信息泄露。当Nginx服务器使用代理缓存的情况下,攻击者通过利用该漏洞可以拿到服务器的后端真实IP或其他敏感信息。
漏洞复现:
漏洞环境:vulhub docker
启动环境:
访问目标网站即可查看到Nginx默认页面,这个页面实际上是nginx做反向代理的8081端口的
使用poc:
可以看到返回了页面的真实ip