BUGTRAQ ID: 29796
CVE ID:CVE-2008-2666
CNCVE ID:CNCVE-20082666
PHP 5是一款开放源代码的网络编程语言。
PHP 5 'chdir()'和’ftok()'函数存在’safe_mode绕过问题,远程攻击者可以利用漏洞在未授权位置检测文件是否存在等敏感信息。
问题代码如下:
PHP_FUNCTION(chdir)
{
char *str;
int ret, str_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str,
&str_len) == FAILURE) {
RETURN_FALSE;
}
if ((PG(safe_mode) && !php_checkuid(str, NULL,
CHECKUID_CHECK_FILE_AND_DIR)) || php_check_open_basedir(str TSRMLS_CC))
{
RETURN_FALSE;
}
ret = VCWD_CHDIR(str);
if (ret != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s (errno %d)",
strerror(errno), errno);
RETURN_FALSE;
}
RETURN_TRUE;
}
str由safe_mode检查,如:
Warning: chdir(): SAFE MODE Restriction in effect. The script whose uid
is 80 is not allowed to access / owned by uid 0 in /www/mb/mb.php on
line 8
在当前目录中,可建立子目录"http:",如chdir("http://…/…/…/…/…/…/"),那么就处于/目录中。
原因是:
TRUE==((PG(safe_mode) && !php_checkuid(str, NULL,
CHECKUID_CHECK_FILE_AND_DIR)) || php_check_open_basedir(str
TSRMLS_CC)))
for
str="http://…/…/…/…/…/…/"
safe_mode会忽略http://中的所有路径。
ftok()也存在相同情况。
PHP PHP 5.2.6
PHP PHP 5.2.5
PHP PHP 5.2.4
PHP PHP 5.2.3
PHP PHP 5.2.2
PHP PHP 5.2.1
目前没有解决方案提供:
<a href=“http://www.php.net/” target=“_blank”>http://www.php.net/</a>
cxib# cat /www/wufff.php
<?
echo getcwd()."\n";
chdir("/etc/");
echo getcwd()."\n";
?>
cxib# ls -la /www/wufff.php
-rw-r--r--