WordPress著名插件Google Analytics by Yoast插件中曝出存储型XSS漏洞,该漏洞能够让未被授权的攻击者在WordPress管理面板中存储任何HTML代码,包括JavaScript。管理员查看插件的设置面板是JavaScript就会被触发,不需要别的交互行为。
漏洞描述
Google Analytics by Yoast是一款用于监视网站流量的WordPress插件。这款插件有大约7百万的下载量,是最受欢迎的WP插件之一。尽管插件代码从2014年开始被 例行安全审计 , 但还是出现了这个漏洞,这次的这个漏洞非常危险,并且显然是Yoast WP插件中 爆出 的最严重的漏洞。
对于攻击者来说,利用这个漏洞在服务器端执行代码相对简单。在默认WP配置下,恶意的用户可以利用这个漏洞通过插件/主题编辑器在服务器上写PHP文件(见视频演示)。或者攻击者也可以更改管理员密码,创建管理员帐号,或者做其他任何服务器网站上已登录用户所能做的事情。
这个漏洞今年1月下旬由Klikki Oy发现的,但是当时还不知道具体的影响,直到三月一份完整的调查结果出炉。现在插件已有更新修复这一问题。
漏洞细节
漏洞的影响是两个问题的结合。首先,缺少访问控制导致未被授权的用户可以修改有关插件的部分设置。攻击者可以覆盖已有的OAuth2验证信息,验证信息在插件中被用作获得Google分析的数据,因此,攻击者可以在插件中使用自己的Google分析账号。
其次,插件中有一个HTML下拉菜单,菜单基于从Google分析下载的数据。数据没有进行处理或者HTML转义。如果攻击者在Google分析账号设置中输入<script>标签之类的HTML代码,这些代码就会出现在WordPress管理面板中,任何浏览这些设置时就会触发。
POC
以下这段HTML片段可以用来劫持使用了漏洞插件的网站中Google分析账号:
<a href="http://YOUR.BLOG/wp-admin/admin-post.php?reauth=1">reauth</a> <br><br> <form method=POST action="http://YOUR.BLOG/wp-admin/admin-post.php"> <input type=text size=100 name="google_auth_code"> <input type=submit> </form>
首先,攻击者会点击"重新授权"链接。这个动作不需要任何验证。它会重置某些插件设置,并将攻击者重定向导一个google.com OAuth验证对话框,攻击者可以在这里获得一个验证代码。接着攻击者会复制这段代码并且粘帖到上面的表格并点击提交。这样攻击者就更新了插件设置中的代码——也是不需要进行授权的。然后插件就会从攻击者的Google分析账号获取数据了。
攻击者会在Google分析账号设置(https://www.google.com/analytics/web/?hl=en#management/Settings/)中填入真正的payload脚本。例如:
test"><script>alert('stored XSS')</script>
这样的脚本会在管理员浏览面板中的设置页面时弹窗。
真实的攻击可能会使用src属性从外部网站加载更加复杂的脚本。可以使用ajax调用加载提交管理表单,可以使用插件编辑器写入服务器端PHP代码,并执行。
视频演示
解决方案
Yoast于2015年3月18日收到提醒。第二天Yoast发布了更新(5.3.3)。
[参考来源Klikki Oy,译/Sphinx,文章有修改,转载请注明来自Freebuf黑客与极客(FreeBuf.COM)]