安全研究

安全漏洞
PHP内存管理器符号比较多个溢出漏洞

发布日期:2007-03-31
更新日期:2007-04-02

受影响系统:
PHP PHP 5.2.0
不受影响系统:
PHP PHP 5.2.1
描述:
BUGTRAQ  ID: 23238

PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。

PHP的内存管理器实现上存在漏洞,本地攻击者可能利用此漏洞提升权限。

如果通过emalloc()函数分配内存的话,PHP中新的Zend内存管理器会在内部的_zend_mm_alloc_int()函数中处理这个请求,首先使用ZEND_MM_TRUE_SIZE宏判断所请求内存块的真实大小,如下所示:

static void *_zend_mm_alloc_int(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ...)
{
    size_t true_size, best_size = 0x7fffffff;
    zend_mm_free_block *p, *end, *best_fit = NULL;

    true_size = ZEND_MM_TRUE_SIZE(size);

    The macro expands to

    (((long)size<(long)ZEND_MM_MIN_SIZE)?(ZEND_MM_ALIGNED_MIN_HEADER_SIZE):
    (ZEND_MM_ALIGNED_SIZE(size+ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE)))

但在进行比较之前这段代码将大小设置为有符长型,因此如果请求了正常情况下会导致内存破坏或越界的很大的内存块,就可能将其处理为负数,仅分配很小的内存块,导致多个可利用的缓冲区溢出。

<*来源:Stefan Esser (s.esser@ematters.de
  
  链接:http://www.php-security.org/MOPB/MOPB-44-2007.html
*>

建议:
厂商补丁:

PHP
---
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://www.php.net/downloads.php#v5

浏览次数:2884
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障