Apache Mod_Security模块堆破坏漏洞
发布日期:2003-10-28
更新日期:2003-11-04
受影响系统:mod_security mod_security 1.7.1
mod_security mod_security 1.7
不受影响系统:mod_security mod_security 1.7.2
描述:
BUGTRAQ ID:
8919
CVE(CAN) ID:
CVE-2003-1171
ModSecurity是一款开放源码WEB应用程序入侵检测和防止系统。作为WEB可嵌入到WEB服务器上使用。
ModSecurity不正确处理通过服务器端脚本传送的大量数据,远程攻击者可以利用这个漏洞破坏应用服务进程的堆结构,可能导致以WEB进程权限在系统上执行任意指令。
问题存在于apache2/mod_security.c中的sec_filter_out()函数中:
<snip>
if (ctx->bufused + len > ctx->buflen) {
char *newbuffer;
// todo: implement a smarter extension policy
unsigned long int newsize = ctx->buflen * 2;
sec_debug_log(r, 3, "sec_filter_out: expanding buffer to %i", newsize);
// allocate a larger buffer
newbuffer = apr_palloc(f->r->pool, newsize + 1);
memcpy(newbuffer, ctx->buffer, ctx->bufused);
// free(ctx->buffer);
ctx->buffer = newbuffer;
ctx->buflen = newsize;
ctx->input_ptr = ctx->buffer + ctx->bufused;
}
memcpy(ctx->input_ptr, data, len);
ctx->input_ptr += len;
ctx->bufused += len;
</snip>
如果进入的数据大小超过(ctx->buflen*2 - ctx->bufused),那么第二个memcpy可以覆盖堆中下一个块的头结构,虽然对客户端传送有限制,不能大于4kB/8kB,但是,如果数据通过服务器端脚本发送数据,产生大量的数据,就可以导致发生缓冲区溢出。
如当写超长文件到输出时:
<?php
Header('Content-Type: image/jpeg');
readfile('some_large_image.jpeg');
?>
当使用GET方式直接获得'some_large_image.jpeg'时是不会发生溢出(不使用上面脚本),但是攻击者如果可以上传上面脚本到服务器,然后使用服务器其它脚本的跨站脚本问题,就可以触发缓冲区溢出。
<*来源:Adam Dyga (
adeon@o2.pl)
链接:
http://marc.theaimsgroup.com/?l=bugtraq&m=106738258331400&w=2
*>
建议:
厂商补丁:
mod_security
------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
mod_security Upgrade mod_security-1.7.2.tar.gz
http://www.modsecurity.org/download/mod_security-1.7.2.tar.gz浏览次数:3626
严重程度:0(网友投票)