漏洞描述
波兰研究人员 Dawid Golunski 发现了这个PHPMailer的远程代码执行漏洞。可实现远程任意代码在web服务器账户环境中执行,并使web应用陷入威胁中。攻击者主要在常见的web表单如意见反馈表单,注册表单,邮件密码重置表单等使用邮件发送的组件时利用此漏洞。PHPMailer广泛应用于开源项目中,包括WordPress、Drupal、1CRM、Joomla!等。且PHPMailer全球范围内的用户量大约有900万。所以这个漏洞影响范围还是比较广的。
漏洞编号
CVE-2016-10033
影响版本
PHPMailer < 5.2.18
漏洞级别
高危
漏洞细节
PHPMailer < 5.2.18版本中,发件人的电子邮件地址在传输时没有转义为shell
命令。造成攻击者可以在发件电子邮件中增加shell
命令以达到在目标上执行恶意代码的目的。
漏洞代码在class.phpmailer.php
第1446行没有进行过滤:
$params = sprintf('-f%s', $this->Sender);
Version 5.2.17
if (!empty($this->Sender)) { $params = sprintf('-f%s', $this->Sender);}if ($this->Sender != '' and !ini_get('safe_mode')) { $old_from = ini_get('sendmail_from'); ini_set('sendmail_from', $this->Sender);}
Version 5.2.18
if (!empty($this->Sender) and $this->validateAddress($this->Sender)) { $params = sprintf('-f%s', escapeshellarg($this->Sender));}if (!empty($this->Sender) and !ini_get('safe_mode') and $this->validateAddress($this->Sender)) { $old_from = ini_get('sendmail_from'); ini_set('sendmail_from', $this->Sender);}
具体细节可以查看GitHub上的代码更新:
mail
函数
$result = @mail($to, $subject, $body, $header, $params);
不过利用此漏洞似乎需要能够控制发件人的电子邮件地址。
漏洞复现
PoC
- https://www.exploit-db.com/exploits/40968
- https://legalhackers.com/videos/PHPMailer-Exploit-Remote-Code-Exec-Vuln-CVE-2016-10033-PoC.html
针对WordPress内核暂无公开可行的漏洞利用代码,WordPress的PHPMailer核心代码在/wp-includes/class-smtp.ph
复现环境
目前有安全研究员在GitHub上共享了PHPMailer的复现环境Docker镜像
安装Docker之后直接运行如下命令:
docker run --rm -it -p 8080:80 vulnerables/cve-2016-10033
然后访问localhost:8080就可以打开漏洞测试环境了
利用
测试远程目标运行如下命令:
./exploit host:port
本地测试如下
./exploit localhost:8080
如果目标存在漏洞执行exploit之后你将获得一个名为”backdoor.php
“的shell,并可通过此shell执行命令:
漏洞修复
- 更新至5.2.18版本
- 升级开源程序内核
官方参考
- https://github.com/PHPMailer/PHPMailer/blob/master/changelog.md
- https://github.com/PHPMailer/PHPMailer/blob/master/SECURITY.md
参考
- https://www.seebug.org/vuldb/ssvid-92586
- https://www.exploit-db.com/exploits/40968
- http://bobao.360.cn/learning/detail/3347.html
- https://github.com/opsxcq/exploit-CVE-2016-10033
- http://hackaday.com/2016/12/25/santa-knows-if-your-contact-form-uses-phpmailer-5-2-18/
- https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html