Lucene search

K
seebugRootSSV:14996
HistoryNov 30, 2009 - 12:00 a.m.

PHP tempname()函数绕过safe_mode安全限制漏洞

2009-11-3000:00:00
Root
www.seebug.org
37

0.007 Low

EPSS

Percentile

78.0%

BUGTRAQ ID: 36555
CVE ID: CVE-2009-3557

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

PHP的tempnam()中的错误可能允许绕过safe_mode限制。以下是ext/standard/file.c中的有漏洞代码段:

PHP_FUNCTION(tempnam)
{
char *dir, *prefix;
int dir_len, prefix_len;
size_t p_len;
char *opened_path;
char *p;
int fd;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &dir, &dir_len,
&prefix, &prefix_len) == FAILURE) {
return;
}

if (php_check_open_basedir(dir TSRMLS_CC)) { [1]
RETURN_FALSE;
}

php_basename(prefix, prefix_len, NULL, 0, &p, &p_len TSRMLS_CC);
if (p_len > 64) {
p[63] = ‘\0’;
}

if ((fd = php_open_temporary_fd(dir, p, &opened_path TSRMLS_CC)) >= 0) {
close(fd);
RETVAL_STRING(opened_path, 0);
}
efree(p);
}

在[1]处tempnam()函数仅检查了open_basedir值。

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

PHP

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

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