安全研究
安全漏洞
Apache HTTP Server畸形Range和Range-Request选项处理远程拒绝服务漏洞
发布日期:2011-08-24
更新日期:2011-08-24
受影响系统:
Apache Group Foundation Apache 2.x描述:
Apache Group Foundation Apache 1.3
BUGTRAQ ID: 49303
CVE ID: CVE-2011-3192
Apache HTTP Server是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数电脑操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
Apache HTTP Server在处理Range和Range-Request选项生成回应时存在漏洞,远程攻击者可能利用此漏洞通过发送恶意请求导致服务器失去响应,导致拒绝服务。
此漏洞源于Apache HTTP Server在处理Range和Range-Request头选项中包含的大量重叠范围指定命令时存在的问题,攻击者可通过发送到服务器的特制HTTP请求耗尽系统资源,导致Apache失去响应,甚至造成操作系统资源耗尽。
<*来源:Kingcope (kingcope@gmx.net)
链接:https://issues.apache.org/bugzilla/show_bug.cgi?id=51714
http://seclists.org/fulldisclosure/2011/Aug/175
http://archives.neohapsis.com/archives/fulldisclosure/2011-08/0285.html
http://www.gossamer-threads.com/lists/apache/dev/401638
https://bugzilla.redhat.com/show_bug.cgi?id=732928
https://issues.apache.org/bugzilla/show_bug.cgi?id=51714
http://securitytracker.com/id?1025960
http://www.apache.org/
*>
建议:
临时解决方法:
在提供完整的修复方案之前,可通过下列选项缓解此漏洞的影响。下例是处理'Range'
和'Request-Range'的不同方法。
注意:'Request-Range'是可追溯到Netscape Navigator 2-3和MSIE 3的旧名称。根据
用户社区,使用选项3可能对旧的'Request-Range'较安全。
1) 使用SetEnvIf或mod_rewrite进行大范围检测,然后忽略Range:标头或拒绝请求。
选项 1: (Apache 2.2)
# 超过5个范围时即丢弃Range标头
# CVE-2011-3192
SetEnvIf Range (?:,.*?){5,5} bad-range=1
RequestHeader unset Range env=bad-range
# 总是丢弃Request-Range; 因为是旧版的
# 追溯到MSIE3、Netscape 2和3.
RequestHeader unset Request-Range
# 可行记录
CustomLog logs/range-CVE-2011-3192.log common env=bad-range
CustomLog logs/range-CVE-2011-3192.log common env=bad-req-range
上例可能对所有配置无效。有时mod_cache和(语言)模块可能在fixup阶段执行unset
之前起作用。
选项 2: (Apache 2.2和1.3之前版本)
# Range:标头中超过5个范围时即拒绝请求。
# CVE-2011-3192
#
RewriteEngine on
RewriteCond %{HTTP:range} !(bytes=[^,]+(,[^,]+){0,4}$|^$)
# RewriteCond %{HTTP:request-range} !(bytes=[^,]+(?:,[^,]+){0,4}$|^$)
RewriteRule .* - [F]
# 总是丢弃Request-Range; 因为是旧版的
# 追溯到MSIE3、Netscape 2和3.
RequestHeader unset Request-Range
数字5是任意的。但对于像给高端eReader提供PDF的站点或提供基于复杂HTTP的视频
流服务的站点还是需要几十个范围的,不应是个问题。
2) 限制请求字段的长度为几百个字节。注意,虽然这样可用保持Range标头短小,但可
能会截断其他标头;例如较大的cookie或安全字段。
LimitRequestFieldSize 200
注意,随着攻击的展开,可能需要进一步限制字段长度或设置其他LimitRequestFields
限制。
请参见: http://httpd.apache.org/docs/2.2/mod/core.html#limitreque...
3) 使用mod_headers完全禁止使用Range标头:
RequestHeader unset Range
注意,这可能会中断某些客户端——例如用于e-Readers和progressive/http-streaming
视频的客户端。
继续忽略Netscape Navigator 2-3和MSIE 3特定旧标头,添加:
RequestHeader unset Request-Range
不像通常使用的Range标头,丢弃'Request-Range'可能不会影响任何客户端。
4) 作为权宜之计,可部署Range标头计数模块:
http://people.apache.org/~dirkx/mod_rangecnt.c
某些平台的预编译二进制文件位于:
http://people.apache.org/~dirkx/BINARIES.txt
5) 应用目前尚在讨论中的任一补丁,例如:
K1Dqc7g@mail.gmail.com%3e" target="_blank">http://mail-archives.apache.org/mod_mbox/httpd-dev/201108.mbox/%3cCAAPSnn2PO-d-C4nQt_TES2RRWiZr7urefhTKPWBC1b+K1Dqc7g@mail.gmail.com%3e
http://svn.apache.org/viewvc?view=revision&sortby=date&revision=1161534
OS和供应商特定信息
==================================
Red Hat: 选项1不能用在Red Hat Enterprise Linux 4上
https://bugzilla.redhat.com/show_bug.cgi?id=732928
NetWare: 预编译的二进制文件可用。
mod_security: 已更新其规则设置,请见
http://blog.spiderlabs.com/2011/08/mitigation-of-apache-range-header-dos-attack.html
操作:
========
担心其服务器遭受DoS攻击的Apache HTTPD用户应考虑立即实施上述缓解方案。
利用第三方攻击工具验证漏洞时,应了解目前多数版本会检查是否存在mod_deflate;
如果此模块不存在,会报告服务器不存在漏洞。但此漏洞的存在不依赖于该模块的存在
与否。
厂商补丁:
Apache Group
------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
www.apache.org
浏览次数:38170
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障
绿盟科技给您安全的保障