FavoriteLoading
0

Http Options出血漏洞CVE-2017-9798 可导致内存泄漏 PoC已公开

 

 

周一,研究员Hanno Böck发现HTTP Options存在出血漏洞CVE-2017-9798,如果网站管理员尝试对无效的 HTTP 方法实施 "Limit" 指令, 则会导致出现漏洞利用的可能,攻击得手后将导致服务器敏感内存泄漏。目前Apache的开发商确认了这个漏洞,尚不清楚其它Web服务软件是否存在这个问题。

如果您使用的是 HTTP 协议在日常的互联网使用, 你通常只使用它的两种方法: Get和Post。但是, HTTP 有许多其他方法, 所以我想您需要知道如何处理它们, 以及是否存在任何漏洞。

一个 HTTP 方法称为Options。它只允许询问服务器,它能支持的其他 HTTP 方法。服务器用 "Allow" 头来应答, 并给我们一个列表,列表项目用逗号来分隔。

Options出血漏洞

CVE-2017-9798

Options出血是在 Apache http 中释放错误后使用的, 这会导致在响应 HTTP 选项请求时构造一个损坏的Allow标头。这可能会泄漏可能包含机密的服务器进程中的任意内存片断。在多个请求之后, 内存块会发生变化, 因此对于易受攻击的主机, 可以泄漏任意数量的内存块。

如果网站管理员对无效的 HTTP 方法实施 "Limit" 指令, 则会出现此问题。

Example .htaccess:

<Limit abcxyz>
</Limit>

影响范围待评估 但Alexa排名前100万的网站中有466台受影响

在Alexa排名前100万网站中,显示了466台主机存在损坏的Allow头部,这些网站的影响面和用户群都非常庞大。理论上, 其他服务器软件可能有类似的错误。另一方面, 此漏洞是非确定性的, 因此并非所有易受攻击的主机都可能被捕捉。

因此, 如果你设置一个非常不寻常的配置选项,就会发生这个问题吗?

在共享的托管环境中存在额外的风险。损坏不限于单个虚拟主机。共享宿主提供程序的一个客户可能会故意创建一个. htaccess 文件, 从而导致这方面的问题, 而且能够从同一系统上的其他主机提取机密数据。

Apache给出了回应

我试图联系受影响的服务器运营人员, 但对方非常不愿意告诉我任何关于他的设置, 所以也没法进行确认。但是, 我找到一个办法,一些损坏的报头中包含了 Apache 清晰的配置选项字符串。这些字符串似乎不太可能出现在其他服务器软件的内存中。但我无法在自己的 Apache 服务器上重现任何类似的东西。我还尝试阅读哪些放在一起Allow头部的代码,看看是否能找到任何线索, 但没有成功。所以不知道任何细节,没办法了,我联系了 Apache 安全小组。

幸运的是Apache开发商Jacob Champion发现了这个问题, 并想通了什么是怎么回事:

apache 支持配置指令Limit,允许限制对特定用户的某些 HTTP 方法的访问。如果在. htaccess 文件中为未在服务器上全局注册的 HTTP 方法,设置了限制指令, 则会发生损坏。

ok,知道这个问题之后, 我可以自己重新这个漏洞了。在. htaccess 文件中为任何无效的 HTTP 方法设置Limit指令后, 在Allow报头的构造中就出现了问题, 同时还可以被Address Sanitizer检测到。(但是, 由于 APR 执行的内存分配抽象, ASAN的工作不可靠。

检测工具:https://github.com/Xsafe/CVE-2017-9798