首页 -> 安全研究

安全研究

绿盟月刊
绿盟安全月刊->第34期->最新漏洞
期刊号: 类型: 关键词:
PHP multipart/form-data POST请求处理远程漏洞

日期:2002-08-16

发布日期:2002-07-22
更新日期:2002-07-23

受影响系统:

PHP PHP 4.2.1
PHP PHP 4.2.0

不受影响系统:

PHP PHP 4.2.2
PHP PHP 4.1.2
PHP PHP 4.1.1
PHP PHP 4.1.0
PHP PHP 4.0.7
PHP PHP 4.0.6
PHP PHP 4.0.5
PHP PHP 4.0.4
PHP PHP 4.0.3
PHP PHP 4.0.2
PHP PHP 4.0.1
PHP PHP 4.0

描述:
----------------------------------------------------------------------

BUGTRAQ  ID: 5278
CVE(CAN) ID: CAN-2002-0717

PHP是一种流行的WEB服务器端编程语言,它功能强大,简单易用,在很多Unix操作系统缺省都安装了PHP, 它也可以在Windows系统下运行。

PHP 4.2.0和4.2.1在处理HTTP POST请求的代码中存在一个严重安全问题。远程或者本地攻击者可能利用这个漏洞以Web服务器运行权限执行任意指令或者造成Web服务器崩溃。

PHP 包含一段代码用来对HTTP POST请求的头部数据进行智能分析,它主要用来区分用户发来的"multipart/form-data"请求中哪些是变量、哪些是文件。PHP 4.2.0开始这部分分析代码被完全重写了,由于缺乏足够的输入检查,用户通过发送一个畸形的POST请求,就可能触发一个错误条件,这个错误并没有被正确的处理。当错误发生时,一个未被初始化的结构被附在mime头链表的后面,当这个链表被释放或者销毁时,PHP会试图释放该结构中的一些指针。由于这个结构没有进行初始化,因此这些指针可能包含以前的函数调用留在堆栈中的数据。如果这些数据是攻击者可以控制的,就有可能利用free/malloc实现中的一些特性来获取控制权。

根据漏洞发现者和PHP开发组的报告,在x86平台下,由于堆栈布局的问题,留在堆栈中的数据无法被有效利用,攻击者无法获取控制权,但可以造成进程崩溃。而在Solaris sparc平台下(可能包含其他系统及平台),攻击者就可以控制堆栈中的数据,使得PHP去释放一个攻击者可以控制的内存块,从而可能获得系统控制权。通常,攻击者可以获取一个普通用户的执行权限。如果web服务器错误地以特权用户(例如 root)身份执行,攻击者也可能获取该特权用户的权限。


<*来源:Stefan Esser (se@FreeBSD.org)
  
  链接:http://security.e-matters.de/advisories/012002.html
        http://www.php.net/release_4_2_2.php
        http://www.cert.org/advisories/CA-2002-21.html
*>

建议:
----------------------------------------------------------------------
临时解决方法:

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

* 修改Apache Web服务器的配置,禁止POST方法的使用。

可以在Apache的配置文件中放入如下代码:

<Limit POST>
   Order deny,allow
   Deny from all
</Limit>

并重启Apache进程。

厂商补丁:

PHP
---
目前厂商已经在最新的4.2.2版本软件中修复了这个安全问题,请到厂商的主页下载:

http://us3.php.net/distributions/php-4.2.2.tar.bz2
版权所有,未经许可,不得转载