首页 -> 安全研究

安全研究

安全漏洞
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

浏览次数:37260
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障