总结

本篇博文详细解释了FV Flowplayer Video Player (WordPress Plugin) 7.4.37.727之前版本的STORED XSS漏洞,为什么会出现,如何使用,如何缓解。请注意,此漏洞已在版本 7.4.38.727 中修补。

漏洞概述

FV Flowplayer Video Player 是一个 WordPress 插件,用于将 FLV 或 MP4 视频嵌入到您的帖子或页面中。 它在 /wp-admin/admin.php?page=fv_player 中存在严重的跨站点脚本 (XSS) 漏洞。它允许经过身份验证的远程用户注入任意 Web 脚本或 HTML。

漏洞分析

/models/db-player.php页面第446行,

当我们发送一个创建视频播放器的post请求时,它包含 `data` 参数,然后存储在 "$value" 变量中。在将 "$value" 变量存储到数据库之前,没有适当的清理方法来去除 HTML 标记。

在/models/db-player.php页面的第446行,

同样,当我们发送一个帖子请求来更新视频播放器时,它包含了`data`参数,然后将其存储在 "$value" 变量中。这里也没有适当的消毒方法。

开发

考虑到没有HTML标签剥离方法,我们可以在onerror中用脚本注入 属性 >标签,然后存储在数据库中并在检索和列出它们时执行。以下是如何重现它的步骤,

打开 WordPress 并转到仪表板 -> FV Player。

点击观看新视频。

在视频输入框中输入 http://localhost ” 并点击保存

脚本存储在数据库中执行。

缓解

有很多XSS 漏洞措施的缓解措施,其中一些是,

  1. 在输入到达时对其进行过滤。
  2. 对输出数据进行编码。
  3. 使用适当的响应标头。
  4. 使用内容安全策略。

内容安全策略:

这是最简单、最有效的方法防止XSS攻击 一.它只是一个元标记,可以非常清楚地向网站说明资源的来源。在修复根本原因(即对输入进行适当清理)之前,此方法非常适合作为 XSS 漏洞的补丁。

上面的元标记应该可以防止跨站点脚本攻击。我们需要做的就是将元标记复制/粘贴到用户页面上。在这种情况下,我们必须将它放在我们的 flowplayer.php 页面上。这可以防止在页面呈现时从数据库加载存储的脚本。

示例:

这个picture shows note 无法加载导入的脚本,因为它违反了我们正在进行的内容安全策略。

参考

  • https://wordpress.org/plugins/fv-wordpress-flowplayer/
  • https://nvd.nist.gov /vuln/detail/CVE-2020-35748#vulnCurrentDescriptionTitle
  • https://github.com/foliovision/fv-wordpress-flowplayer/commit/3041bae000b5769ea6dba794898b3e9183afcf5a