CNNVD-ID编号 | CNNVD-200704-003 |
CVE编号 | CVE-2007-1824 |
发布时间 | 2007-03-31 |
更新时间 | 2007-04-27 |
漏洞类型 | 缓冲区溢出 |
漏洞来源 | Stefan Esser※ s.esser@ematters.de |
危险等级 | 中危 |
威胁类型 | 远程 |
厂 商 | php |
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
来源: MISC
来源: UBUNTU
名称: USN-455-1
来源: SUSE
名称: SUSE-SA:2007:032
链接:http://www.novell.com/linux/security/advisories/2007_32_php.html
来源: DEBIAN
名称: DSA-1283
来源: SECUNIA
名称: 25062
来源: SECUNIA
名称: 25057