PHP posix_mkfifo()函数绕过open_basedir安全限制漏洞

来源:岁月联盟 编辑:zhuzhu 时间:2009-12-21
PHP posix_mkfifo()函数绕过open_basedir安全限制漏洞 影响版本:
PHP PHP 5.3.x
PHP PHP 5.2.x漏洞描述:
BUGTRAQ  ID: 36554
CVE(CAN) ID: CVE-2009-3558

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

PHP的posix_mkfifo()函数中的错误可能允许绕过open_basedir限制。以下是ext/posix/posix.c文件中的有漏洞代码段:

PHP_FUNCTION(posix_mkfifo)
{
char *path;
int path_len;
long mode;
int result;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &path,
&path_len, &mode) == FAILURE) {
RETURN_FALSE;
}

if (PG(safe_mode) && (!php_checkuid(path, NULL, CHECKUID_ALLOW_ONLY_DIR)))
{ [1]
RETURN_FALSE;
}

result = mkfifo(path, mode);
if (result < 0) {
POSIX_G(last_error) = errno;
RETURN_FALSE;
}

RETURN_TRUE;
}

在[1]处posix_mkfifo函数仅检查了safe_mode值。<*参考 
http://secunia.com/advisories/37821/
http://securityreason.com/securityalert/6600
*>
SEBUG安全建议:
厂商补丁:

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

http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3/ext/posix/posix.c?view=log
http://svn.php.net/viewvc/php/php-src/branches/PHP_5_2/ext/posix/posix.c?view=log