- 在线时间
- 1 小时
- 信用度
- 2122
- 最后登录
- 2015-9-21
- 注册时间
- 2007-3-8
- 精华
- 2
- 阅读权限
- 100
- UID
- 4
|
1楼
发表于 2007-5-4 20:17:05
|
查看: 2459 |
回复: 0
[font=Arial]受影响系统:PHP PHP 5.2.0 [/font]
[font=Arial]不受影响系统:PHP PHP 5.2.1 [/font]
[font=Arial]描述:BUGTRAQ ID: 23238 [/font]
[font=Arial]PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。PHP的内存管理器实现上存在漏洞,本地攻击者可能利用此漏洞提升权限。如果通过emalloc()函数分配内存的话,PHP中新的Zend内存管理器会在内部的_zend_mm_alloc_int()函数中处理这个请求,首先使用ZEND_MM_TRUE_SIZE宏判断所请求内存块的真实大小,如下所示: [/font]
[font=Arial]
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)))
但在进行比较之前这段代码将大小设置为有符长型,因此如果请求了正常情况下会导致内存破坏或越界的很大的内存块,就可能将其处理为负数,仅分配很小的内存块,导致多个可利用的缓冲区溢出。(t005)
[/font] |
|