首页 -> 安全研究

安全研究

安全漏洞
PHP 4.0.3 IMAP模块远程缓冲区溢出漏洞

发布日期:2003-01-08
更新日期:2003-01-14

受影响系统:
PHP PHP 4.0.3
    - Debian Linux 2.2 arm
    - Debian Linux 2.2 powerpc
    - Debian Linux 2.2 68k
    - Debian Linux 2.2 i386
    - Debian Linux 2.2 sparc
    - Debian Linux 2.2 alpha
    - Debian Linux 2.2 IA-32
不受影响系统:
PHP PHP 4.3.0
PHP PHP 4.2.3
PHP PHP 4.2.2
PHP PHP 4.2.1
PHP PHP 4.2.0
PHP PHP 4.1.2
PHP PHP 4.1.1
PHP PHP 4.1.0
PHP PHP 4.1
PHP PHP 4.0.7
PHP PHP 4.0.6
PHP PHP 4.0.5
描述:
BUGTRAQ  ID: 6557

PHP是一种被广泛使用的脚本语言,用于基于Web的CGI程序,它可被安装在包括Apache、IIS、 Caudium、Netscape、iPlanet和OmniHTTPd等多种Web服务器上。

PHP 4.0.3中的IMAP模块不正确调用imap_open()函数,远程攻击者可以利用这个漏洞进行缓冲区溢出,可导致目标用户程序崩溃。

PHP 4.0.3版本中包含的IMAP模块中的imap_open()函数不正确调用strcpy(),攻击者提交恶意数据可导致出发缓冲区溢出。目前没有证实可利用来在系统上执行任意指令。

<*来源:pre (pre@geekgang.co.uk
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=98382389520717&w=2
*>

建议:
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* pre <pre@geekgang.co.uk>提供了如下第三方补丁:

diff -ru php-4.0.4pl1/ext/imap/php_imap.c php-4.0.4pl1-patched/ext/imap/php_imap.c
--- php-4.0.4pl1/ext/imap/php_imap.cWed Oct 25 18:43:52 2000
+++ php-4.0.4pl1-patched/ext/imap/php_imap.cMon Feb 26 13:17:08 2001
@@ -371,8 +371,8 @@

static void php_imap_init_globals(zend_imap_globals *imap_globals)
{
-imap_globals->imap_user=NIL;
-imap_globals->imap_password=NIL;
+imap_globals->imap_user[0] = 0;
+imap_globals->imap_password[0] = 0;
imap_globals->imap_folders=NIL;
imap_globals->imap_sfolders=NIL;
imap_globals->imap_alertstack=NIL;
@@ -633,8 +633,11 @@
}
}

-IMAPG(imap_user) = estrndup(Z_STRVAL_PP(user), Z_STRLEN_PP(user));
-IMAPG(imap_password) = estrndup(Z_STRVAL_PP(passwd), Z_STRLEN_PP(passwd));
+strncpy(IMAPG(imap_user), Z_STRVAL_PP(user), IMAPSTRLEN);
+strncpy(IMAPG(imap_password), Z_STRVAL_PP(passwd), IMAPSTRLEN);
+
+ IMAPG(imap_user)[IMAPSTRLEN-1] = 0;
+IMAPG(imap_password)[IMAPSTRLEN-1] = 0;

#ifdef OP_RELOGIN
/* AJS: persistent connection handling */
@@ -766,8 +769,6 @@
} else {
#endif
imap_stream = mail_open(NIL, Z_STRVAL_PP(mailbox), flags);
-efree(IMAPG(imap_user));
-efree(IMAPG(imap_password));

if (imap_stream == NIL) {
php_error(E_WARNING, "Couldn't open stream %s\n", (*mailbox)->value.str.val);
diff -ru php-4.0.4pl1/ext/imap/php_imap.h php-4.0.4pl1-patched/ext/imap/php_imap.h
--- php-4.0.4pl1/ext/imap/php_imap.hTue Oct 17 16:42:05 2000
+++ php-4.0.4pl1-patched/ext/imap/php_imap.hMon Feb 26 13:16:11 2001
@@ -13,6 +13,7 @@
extern zend_module_entry imap_module_entry;
#define imap_module_ptr &imap_module_entry

+#define IMAPSTRLEN 80

/* Data types */

@@ -140,8 +141,8 @@
PHP_FUNCTION(imap_mime_header_decode);

ZEND_BEGIN_MODULE_GLOBALS(imap)
-char *imap_user;
-char *imap_password;
+char imap_user[IMAPSTRLEN];
+char imap_password[IMAPSTRLEN];
STRINGLIST *imap_folders;
STRINGLIST *imap_sfolders;
STRINGLIST *imap_alertstack;

厂商补丁:

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

PHP Upgrade PHP 4.3.0
http://www.php.net/downloads.php

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