近日,WordPress母公司Automattic发布了bbPress 2.5.9版本,在这个官方的WordPress论坛插件的最新版本中,修复了一个威胁程度较高的存储型XSS漏洞,影响范围包括现有的bbPress版本,即版本< 2.5.9的皆会受到影响。
根据来自WordPress.org的统计数据,当前已有超过 30万站点使用了该插件。而据悉,该漏洞是一个存储型XSS漏洞,此类漏洞与反射型XSS漏洞,并称为XSS的两大类型漏洞。我们知道,在存储型XSS漏洞中,攻击者可以利用漏洞于Web平台中植入恶意代码,而恶意代码会被存储于后台或数据库中,随后其他用户访问受影响页面时,便会执行攻击者此前植入的恶意代码,从而实现跨站的攻击。
该XSS 漏洞存在于插件的用户提及功能中
在这个案例中,一开始来自Sucuri的安全研究人员称其发现一种方法,攻击者通过用户提及功能(即@用户名,而bbPress的用户提及功能能够将@用户名替换成另外一个链接,创建了一个嵌套链接的HTML结构。),可在论坛文章中存储恶意代码。而这些文章会被存在到数据库中,后面会展示给随后的访问者。如果攻击者有着更加成熟的技术,可通过这种方法从版主或者管理员处窃取cookies,以管理员身份进行操作,实现提权。
技术细节
在 WordPress中,所有文章和回复的内容会通过 WordPress的 wp_kses()函数进行过滤,而该函数执行着一个白名单机制,允许HTML 标签及其属性通过过滤引擎,如“a“标签以及其中的“href”属性等。以下为过滤的机制,
接着我们可以看到,其中有个bbp_mention_filter过滤函数,该函数便是对用户提及功能进行过滤,其具体实现代码如下,
上述代码执行流程如下,
1、首先调用bbp_find_mentions函数,搜索文章内容中存在的用户提及关键符号“@”,通过以下正则来实现,
/[@]+([A-Za-z0-9-_/.@]+)/b/
然后搜索完成后,返回搜索结果。
2、对于每一个搜索到的结果,则检查是否有与它相匹配的用户,以及该用户是否在线。
3、通过上述两个步骤,接下来便会在后台程序中将提及的用户名,替换为一个HTML超链接标签,可链接到用户的个人页面中去。
实际上,它并没有检测提及的用户名是否存在于一个HTML标签属性中。而为了更加直观的说明这个问题,我们假设现在有个用户,其名称为“test”,在某篇文章中回复了一个包含超链接标签的评论,并将其中的“href”属性设置为@test,具体如下,
<a href="@test">link</a>
然后接下来按照流程,会将@用户名替换成超链接标签,具体如下,
<a href="<a href="http://targetsite/test/profile/" rel="nofollow">test</a>">link</a>
正如你看到的一样,此前回复中的超链接标签的双引号顺序便被打破了,而攻击者正可以利用这个机会插入恶意代码,实现跨站攻击。
漏洞处置时间表
4月12日:Sucuri安全团队向bbPress的管理者报告了该漏洞;
5月2日:bbPress 2.5.9修复版本发布,并已解决该问题;
5月3日:Sucuri安全团队发布漏洞细节。
如有安装此插件的用户,需尽快升级版本,保证站点安全性,降低遭受攻击风险。
*参考来源:softpedia,sucuri,FB小编troy编译,转载请注明来自1024rd黑客与极客(1024rd.COM)