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

2009-12-20T00:00:00
ID SSV:15112
Type seebug
Reporter Root
Modified 2009-12-20T00:00:00

Description

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值。

PHP PHP 5.3.x PHP PHP 5.2.x 厂商补丁:

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