PHP 的 DoS 漏洞,Bug 61461
来源:phperz.com 作者:phper 发布时间:2012-04-11
当一个包含大数值 Content-Length 的 HTTP 请求被发送到内建的 PHP web 服务器后,可以触发拒绝服务问题(DoS)。 Bug 61461 Content-Length 头的值被直接传入了 premalloc() 函数,在 sapi/cli/php_cli_server.c 第1538行。然后 Zend/zend_alloc.h 的内联函数 malloc(
当一个包含大数值 Content-Length 的 HTTP 请求被发送到内建的 PHP web 服务器后,可以触发拒绝服务问题(DoS)。
Bug 61461
Content-Length 头的值被直接传入了 premalloc() 函数,在 sapi/cli/php_cli_server.c 第1538行。然后 Zend/zend_alloc.h 的内联函数 malloc() 将报错,终止进程,抛出“Out of memory”错误。
static int php_cli_server_client_read_request_on_body(php_http_parser *parser, const char *at, size_t length)
{
php_cli_server_client *client = parser->data;
if (!client->request.content) {
client->request.content = pemalloc(parser->content_length, 1);
client->request.content_len = 0;
}memmove(client->request.content + client->request.content_len, at, length);client->request.content_len += length;return 0;}把 Content-Length 设置为 2^31 - 10,也就是接近32位系统的上限值,能够重现这个问题。
测试脚本:下面这个 HTTP 请求将触发这个bug。
POST / HTTP/1.1Content-Type: application/x-www-form-urlencodedContent-Length: 2147483648A=B 正确结果:我们预期得到一个有意义的错误信息。
Invalid request (Requested Content-Length is larger the allowed limit of XYZ)实际结果:PHP 5.4.0 Development Server started at Tue Mar 20 19:41:45 2012Listening on 127.0.0.1:80Document root is /tmpPress Ctrl-C to quit.Out of memory 延伸阅读:PHP wordwrap()缓冲区溢出漏洞PHP 5.2.5之前版本多个安全漏洞dedecms最新 tag.php注入漏洞分析与利用PHP 5.2.8 紧急发布 修复5.2.7严重漏洞phpcms漏洞:phpcms2008 安全漏洞补丁,影响0903之前的所有版本PHP程序常见漏洞和防范方法PHP文件包含漏洞原理分析和利用方法如何在php中修补XSS漏洞php函数intval()使用不当的安全漏洞分析PHP3 "safe_mode"出现失效漏洞 PHP FirstPost存在路径泄露漏洞PHP Header函数远程脚本注入漏洞浅析PHP程序中的目录遍历漏洞7个最主要的PHP安全漏洞phpMyFAQ 2.7.1 发布,修复PHP代码注入漏洞PHP 5.3.9 - 修补重大Hash冲突漏洞PHP又有重大漏洞 多语言拒绝服务漏洞事件预警Ubuntu发布PHP重要补丁修复多个PHP漏洞(包括php hash漏洞)