最近,笔者在研究一些与WordPress漏洞相关内容。Sucuri、RISP等安全公司对WordPress有着一系列的深入研究,因此笔者计划陆续将一些有意思文章翻译出来,与大家共同学习下,祝君多挖漏洞。

这篇文章是来自Sucuri安全公司的Marc-Alexandre Montpas,他对于WordPress 5.2.3安全更新进行了diff后,对更新的内容提出了自己的见解。文章中虽然没有给出明确的利用,但是针对安全补丁分析与逆推的思路,却很好玩。

正如作者本人说的

“Reversing security patches is an interesting challenge”

下面翻译稿正文开始

前言

上周,WordPress发布了5.2.3版本,此版本是一个安全维护更新版本,因此包含许多安全修复程序。我们日常工作的一部分是分析这些安全版本,发现它正在修复的安全问题,并为进一步的内测制作poc。

基于我们的分析,此版本并没有高危漏洞被修复。已修复的漏洞都需要某种程度的限制,像是需要用户交互或拥有高权限帐户。在某些情况下,这些漏洞这只能由目标主动触发,在这种情况下,为了成功利用它们,需要进行一些细致的社会工程学工作。

尽管如此,您还是应该及时更新您的站点以保护自己免受这些攻击。

本文提供了更多关于WordPress 5.2.3版本修复漏洞过程中的有趣细节。

技术分析

在Post Preview中存在存储型XSS漏洞

WordPress似乎有一段旧代码,它最初旨在通过将UTF-8 URL编码为HTML实体来解决“JavaScript bug with foreign languages”问题。

https://core.trac.wordpress.org/changeset/45935

事实证明,它可能使具有某种权限的攻击者(如contributors投稿者)将XSS存储在陷阱帖中。要使该攻击起作用,需要具有更高权限的另一个用户(如管理员)预览该帖子。

利用此漏洞的一种可行方法是:恶意的contributors身份用户在其帖子中添加锚标签指向:


%u003A部分将被回调函数解码,从而导致代码变为


这将被解析为JavaScript,并在单击该锚链接后启动弹框。

在评论中存在存储型XSS漏洞

更新日志中提到以下内容:

“第二个是存储评论中的跨站点脚本漏洞。”

从技术角度来看,这条线是模棱两可的。可以通过两种不同的方式来理解:

  1. 被修复的issue是影响 WordPress 评论系统存储的XSS漏洞

  2. 可以通过使用存储在网站上的评论来利用此漏洞,这意味着需要执行更多步骤才能成功进行攻击。

初步分析显示,这可能是后者,并且需要使用攻击者的评论,使得站点管理员执行一些非常具体的步骤。如果这是唯一可以利用此漏洞的情况,我们高度怀疑是否会在实战中看到尝试利用此漏洞的案例。

https://core.trac.wordpress.org/changeset/45990/

在更改中可见, wp_rel_nofollow_callback**函数被用来调用shortcode_parse_atts函数从而分析**HTML标签属性。虽然此用例接近其设计目的,但是短代码提供了常规HTML标签所没有的一些功能,如:支持类似C的转义序列

这是一个大问题,因为如果检测到rel属性,解码值将重新追加到最终注释中。不幸的是,对于攻击者来说,普通游客不可能直接在评论中添加该属性,因为wp_kses并没有明确该属性,因此需要执行多个步骤。

攻击流程如下:

  1. 攻击者发布恶意评论,其中包含以下内容的锚点:href =“javascript \ x3aalert(1);”

  2. wp_rel_nofollow_callback自动添加一个rel=” nofollow”属性的标签。

  3. 管理员需要在管理仪表板上打开注释编辑视图,并不修改任何内容的情况下重新保存该注释。这将强制脚本解码该标记所有属性中的转义序列。然后href属性将包含javascript:alert(1); 允许Javascript代码在单击该链接时运行。

媒体上传中存在反射型XSS

仅当用户尝试使用特制文件名上传文件时,而他无权在此上下文中上传文件,才会发生此漏洞,。

这可能是以下几种情况之一:

  1. 用户根本无法上传文件。

  2. 用户无法上传指定帖子上的文件。

  3. 用户尝试使用无效文件替换标题或背景图像。

包含文件名和HTML内容类型的响应将包含XSS。

由于此操作受nonce保护,因此不能在跨站点请求伪造(CSRF)中用它来攻击其他用户。

通过在所有场景下使用esc_html转义文件名以及将text/ html中响应的内容类型替换为text / plain来修复此漏洞。

您可以在此处查看WordPress trac上的完整更改日志:https//core.trac.wordpress.org/changeset/45936

URL清理问题

esc_url函数用于清理URL,以便可以安全地将其附加到HTML标记属性的上下文中。遗憾的是,由于esc_url中用来验证给定URL中使用协议的wp_kses_bad_protocol_once函数中存在漏洞,有一些方法可以绕过esc_url的保护。

https://core.trac.wordpress.org/changeset/45997

根据补丁,此函数在处理不完整的HTML实体时,可能无法检测到恶意协议,即使它们缺少结束分号,浏览器仍然可以正确解码这些实体。

因此,攻击者可以使用如下URL来绕过该保护:

JQuery更新修补“原型污染”

WordPress使用最新的安全更新修补了其JQuery版本。

此更新消除了利用原型污染漏洞攻击的可能性。目前并没有使用该技术的已知漏洞。

结论

逆推安全补丁是一项有趣的挑战。仅仅使用补丁,你就要推断出基本的意图是什么。有时,这是一项琐碎的练习,修复与问题之间存在直接关系。

其他时候,正如这个版本所阐明的那样,你必须后退一步,才有更大的格局; 研究点与点之间如何互连; 排除攻击者会攻击的明显死角,剩下的东西往往是你正在寻找的问题所在。

如果您的WordPress安装尚未自动更新,我们强烈建议您尽快升级。

原文链接:https://blog.sucuri.net/2019/09/dissecting-the-wordpress-5-2-3-update.html