Apache HTTP Server CVE-2011-3192拒绝服务漏洞
发布时间:2011-09-05   作者:启明星辰

BUGTRAQ  ID: 49303
CVE(CAN) ID: CVE-2011-3192

 

发布日期:2011-08-24
更新日期:2011-08-24

 

受影响系统:
Apache 2.0.x
Apache 2.2.x

 

漏洞描述及原理简介:

 

本周,apache爆出了一个0day漏洞,该漏洞源于Apache HTTP Server处理来自客户端的HTTP请求中畸形的Range头选项时存在的问题,如果在Range选项中设置了大量重叠的范围指定命令,则Apache会在构造回应数据时消耗大量内存和CPU资源,导致Apache失去响应,甚至造成操作系统资源耗尽。

 

关于Range头的作用可以参考rfc文档的14.35节,这里简单介绍一下。

 

HTTP请求中的Range选项部分本身是用来表示分片传输数据的,在断点续传技术中用的比较普遍。

 

比如:有一组数据为:abcdefghijklmnopq

 

HTTP中的Range选项请求如下:

 

Range:bytes=1-1

 

那么服务器就返回:b(以0作起始)

 

Range:bytes=1-2,2-3

 

那么服务器就依次返回bc和cd

 

Range:bytes=1-2,1-3,1-4

 

那么服务器就返回bc,bcd,bcde

 

下面我们来看看攻击者恶意构造的数据包

 


 
恶意攻击者通过构造将近2000个范围使得Apache在构造返回数据包的时候内存暴涨。由于构造的是重复范围的数据因此需要在内存中构造大量的数据。如果还是我们上面说的返回的那些数据,那么服务器就要在内存中不断构造这样的数据以便返回。

 

a
ab
abc
abcd
abcde
abcdef
abcdefg

 

这样势必就会占用大量内存。造成虚拟内存暴涨。

 

另外由于需要不断递增解析Range头的不同范围,也就是先解析报文中的“5-1”,然后构造返回包,再解析“5-2”,再构造返回包…由于一个完整的数据包的范围就有将近2000个,所以在解析Range头的时候也会损耗大量的CPU资源。

 

对于硬件性能不太好的服务器来说,内存暴涨,CPU占用暴涨这两大问题足以使得服务器在较短的时间内宕机。而攻击者却不会付出太大的代价。其实说到底,这也不能算是一个代码上的漏洞,而是设计上没考虑到有人会利用这种猥琐的方式“累死”服务器,修补该漏洞的方法也就是限制一下Range头请求的范围即可。

 

启明星辰已经针对该事件发布了相应产品的漏洞库升级包,客户升级后可以准确报警或阻断该攻击行为,同时详述了手工防范该攻击的方法。

 

漏洞危害:
  

Apache会在构造回应数据时消耗大量内存和CPU资源,导致Apache失去响应,甚至造成操作系统资源耗尽。

 

解决方案:

 

1、 更新至启明星辰最新事件库

 

2、  上apache官网更新至最新版本

文章来源:启明星辰
  • 公司总部 | 分支机构 | 法律声明 | 投资者关系 | 400-624-3900 800-810-6038
  • © 启明星辰1996-2015 版权所有 京ICP备05032414号 京公网安备11010802024551号