PHP php_stream_filter_create()函数缓冲区溢出漏洞

漏洞信息详情

PHP php_stream_filter_create()函数缓冲区溢出漏洞

漏洞简介

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

PHP的php_stream_filter_create()函数实现上存在缓冲区溢出漏洞,本地攻击者可能利用此漏洞提升自己的权限。

当php_stream_filter_create()函数创建过滤器时,首先在哈希表中通过名称搜索过滤器,如果不成功的话就检查是否存在支持所请求过滤器的通配符过滤器。这个操作由以下代码处理:

if (SUCCESS == zend_hash_find(filter_hash, (char*)filtername, n, (void**)&factory)) {

filter = factory->create_filter(filtername, filterparams, persistent TSRMLS_CC);

} else if ((period = strrchr(filtername, \’\’.\’\’))) {

/* try a wildcard */

char *wildname;

wildname = estrdup(filtername);

period = wildname + (period – filtername);

while (period && !filter) {

*period = \’\’\0\’\’;

strcat(wildname, \”.*\”);

if (SUCCESS == zend_hash_find(filter_hash, wildname, strlen(wildname), (void**)&factory)) {

filter = factory->create_filter(filtername, filterparams, persistent TSRMLS_CC);

}

*period = \’\’\0\’\’;

period = strrchr(wildname, \’\’.\’\’);

}

efree(wildname);

}

可见这个函数假设字符串的末尾不会出现句号(\”.\”),因为根本就没有保存这种情况下所需的额外内存字节,因此如果所创建的过滤器名称末尾包含有句号的话就会导致单字节溢出,用\”\0\”字符覆盖内存中之后的字节。

漏洞公告

目前厂商已经发布了升级补丁以修复这个安全问题,补丁下载链接:

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

参考网址

来源: BID

名称: 23237

链接:http://www.securityfocus.com/bid/23237

来源: MISC

链接:http://www.php-security.org/MOPB/MOPB-42-2007.html

来源: UBUNTU

名称: USN-455-1

链接:http://www.ubuntu.com/usn/usn-455-1

来源: SUSE

名称: SUSE-SA:2007:032

链接:http://www.novell.com/linux/security/advisories/2007_32_php.html

来源: DEBIAN

名称: DSA-1283

链接:http://www.debian.org/security/2007/dsa-1283

来源: SECUNIA

名称: 25062

链接:http://secunia.com/advisories/25062

来源: SECUNIA

名称: 25057

链接:http://secunia.com/advisories/25057

来源: SECUNIA

名称: 25056

链接:http://secunia.com/advisories/25056

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享