安全研究

安全漏洞
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(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障