Optionsbleed 漏洞泄露 Apache Server 的内存信息

2017-09-21 234506人围观 ,发现 2 个不明物体 漏洞

本周一安全研究员 Hanno Böck 发现,部分 Apache 服务器可能因 Optionsbleed 漏洞(CVE-2017-9798)泄漏服务器内存信息。实际上这个漏洞和 OpenSSL 的心脏滴血问题有相似的地方,攻击者都可以查询服务器并向Apache服务器骗取数据。目前该漏洞原因已经探明,评级为中危,影响的范围有限,运行 Apache Web 服务器的用户请升级至最新版本并安装补丁。【补丁见文末】

optionsbleed.jpg

Böck 表示 Optionsbleed 在严重性上比不上 Heartbleed,因为Optionsbleed 仅仅会在 Apache web 服务器进程中泄露信息,而不是泄漏所有全部的数据内容。也就是说,泄漏的数据内容仅限于Apache正在处理的内容,一般只是 WWeb 页面的内容。尽管如此危险仍然存在,因为 Optionsbleed 依然可能泄漏原本只有认证用户才可获取的特定页面内容。

Optionsbleed 如何影响服务器

我们都知道Web服务器的工作原理,每当客户端(如Web浏览器)向服务器发出请求时,GET 或 POST 请求会发送到服务器端,服务器响应就会传送 Web 页面的内容或相应的文件到客户端。

而 Apache 服务器能够响应很多其他的请求(方法)——例如 PUT,PATCH,HEAD 以及其他方法。而这些请求是随着时间发展慢慢添加进来的,并非所有的 Apache 服务器都可以支持。因此,部分的服务器管理员可能会禁止部分方法。而为了避免发送给服务器的请求进入“黑洞”,Apache 服务器支持名为 OPTIONS 的方法。客户端可以通过 OPTIONS 方法请求查询服务器能够响应的HTTP方法,而服务器则会返还一串以逗号分隔的支持方法的名字。

optionsbleed.png

Optionsbleed 漏洞发现过程

这次 Optionsbleed 的漏洞发现源于研究员 Böck 进行的一项测试,他扫描了 Alexa 排名前 100 万的网站,来看看哪些网站使用支持 OPTIONS 的 Apache 服务器。而测试结果显示,466 台主机响应了与下述内容相似的乱码回复。

Allow: ,GET,,,POST,OPTIONS,HEAD,,

Allow: POST,OPTIONS,,HEAD,:09:44 GMT

Allow: GET,HEAD,OPTIONS,,HEAD,,HEAD,,HEAD,, HEAD,,HEAD,,HEAD,,HEAD,POST,,HEAD,, HEAD,!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

Allow: GET,HEAD,OPTIONS,=write HTTP/1.0,HEAD,,HEAD,POST,,HEAD,TRACE

可以看到,除了正常的的 Allow 响应之外,其中的这 466 台服务器还答复了一些随机数据,看起来像网页的源代码——这些就是所谓的泄漏内容了。 Böck 发现自己无法重现问题并找到关键所在,所以他立即向Apache安全团队汇报了自己的发现。

随后,Apache 开发人员 Jacob Champion 协助进行调查之后发现,Apache 源代码中存在 Optionbleed 漏洞,展开修补后立即提供了补丁文件。

Optionsbleed 漏洞只影响少量服务器

在进行深入调查 Optionsbleed 之后, Böck 和 Champion 发现 Optionsbleed 在危险性上远远不如此前OpenSSL导致的心脏滴血问题(Heartbleed)。问题出现的前提是——管理员在服务器配置的.htaccess 文件中应用了 “Limit” 选项。

< Limits PATCH PUT DELETE >
Deny from all
< /Limits >

一般,服务器管理员将 .htaccess 文件放在 Apache 服务器文件夹中,以便设置仅适用于该文件目录的规则。而服务器所有者使用 .htaccess 的 “Limit” 选项来控制服务器单独在该文件夹中应答的请求。

Böck 和 Champion则表示,如果.htaccess文件的规则与放置在上层目录或普通服务器配置中的.htaccess文件中的限制规则相矛盾时,Apache 就会陷入混淆,因此出现 Optionsbleed 漏洞。

从技术角度来看,这是一个 use-after-free 的漏洞,会在 Apache 服务器附近的内存区域泄漏出内容。

漏洞测试脚本

最简单的测试方法是在循环中使用 Curl 发送OPTIONS 请求:

for i in {1..100}; do curl -sI -X OPTIONS https://www.google.com/|grep -i "allow:"; done

不同的服务器配置下,对于OPTION请求可能会有不同的响应。需要测试的用户可以尝试不同的路径,HTTP或者 HTTPS host,有 www 或没有 www开头的地址都可能导致不同的测试结果。

python的POC脚本【github

问题从 2014 年开始就存在

也有其他用户指出,这个问题此前在2014年时曾被 Old Dominion University 的研究员发现过并写在论文中。

但目前来看 Apache Web 服务器团队还没有发布新的二进制文件,目前可用的补丁文件适用于2.4.x2.2.x版本。

而对于运行在共享环境中的Apache服务器,由于多个用户在同一台机器上都不输了不同的.htaccess文件,最有可能受到 Optionsbleed 漏洞影响。建议所有服务器尽快安装补丁。

参考来源:

helpnetsecurity

securityaffairs

bleepingcomputer

exploit-db

python PoC

fuzzing-project

*本文作者:Elaine,转载请注明FreeBuf.COM

发表评论

已有 2 条评论

取消
Loading...
css.php