WordPress 5.1 CSRF 导致远程命令执行漏洞安全通告

发布时间 2019-03-15

漏洞编号和级别


CVE编号:暂无,危险级别:高危, CVSS分值:官方未评定


影响范围


受影响版本: 

WordPress 5.1.1 之前的版本 (不含 5.1.1)


漏洞概述


3 13 日,RIPSTECH 发布了 WordPress 5.1 CSRF 漏洞导致远程代码执行的内容细节。攻击者可以通过欺骗目标博客的管理员访问攻击者设置的网站来接管任何启用了评论的WordPress网站。一旦受害管理员访问恶意网站,就会在后台针对目标WordPress博客运行跨站点请求伪造(CSRF)漏洞,而不会受到受害者的注意。CSRF漏洞利用了多个逻辑缺陷和清理错误,这些错误在组合时会导致远程执行代码和完整的站点接管。


漏洞存在于5.1.1之前的WordPress版本中,可以使用默认设置进行利用。


超过33%的互联网网站使用WordPress。考虑到评论是博客的核心功能并且默认情况下已启用,该漏洞会影响数百万个网站。


漏洞详情


WordPress 的处理过程中由于要实现一些特性的原因,WordPress并没有针对评论的发布做CSRF限制,那么攻击者就能够使用CSRF攻击来攻击WordPress管理员使其通过其权限创建评论。


WordPress试图通过在评论表单中为管理员生成一个额外的随机数来解决这个问题。当管理员提交评论并提供有效的随机数时,评论将在不经过任何清理函数的情况下创建。如果随机数无效,评论仍会创建,但会被清理函数处理。



可以看到评论通常是wp_filter_kses来负责清理的。wp_filter_kses仅允许仅有 href 属性的 a 标签。


如果是如下这种情况:创建评论的用户拥有unfiltered_html权限,并且没有提供有效的随机数,则用 wp_filter_post_kses 来清理注释。


wp_filter_post_kses 虽仍会删除任何可能导致跨站点脚本漏洞的 HTML 标记和属性。但允许了一些其他的常见属性比如rel


WordPress 在处理评论中的 a 标签的属性时候会通过如下代码,将属性处理为键值对关系键是属性的名称,值是属性值。




WordPress 然后检查rel属性是否被设置。只有通过 wp_filter_post_kses 过滤注释,才能设置此属性。按如下方式处理。



标题属性值用双引号括起来( 3018 )。这意味着攻击者可以通过注入闭合title属性的额外双引号来注入额外的 HTML 属性。


例如:title='XSS " onmouseover=alert(1) id="'

理论上 将会变成

然后在经过处理后该评论即会被 WordPress 存储入数据库。


攻击者在创建恶意注释后获取远程执行代码的下一步是获取管理员执行注入的JavaScript。评论显示在目标WordPress博客的前端。 WordPress本身不受X-Frame-Options标头的保护。这意味着评论可以显示在攻击者网站上的隐藏