从WordPress安全月学习 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

从WordPress安全月学习

申博_安全防护 申博 165次浏览 已收录 0个评论

从WordPress安全月学习

去年12月,我们每天发布一次影响WordPress核心或最流行的WordPress插件的漏洞,旁边是wordpress.org中的一个关键持久性XSS 这篇博文将总结开发人员常犯的错误以及我们的降临日历对WordPress社区的总体影响以及WordPress安全的当前状态。

关于安全月

在我们的代码分析解决方案RIPS的帮助下,我们发现了WordPress核心本身以及许多最流行的WordPress插件中的关键漏洞。其中一些有多个活动安装。例如,允许WordPress网站所有者通过其网站销售产品的电子商务插件WooCommerce比最大的电子商务平台本身具有更多的有效安装。在2018年12月,我们每天发布一个新漏洞,其中包含用于学习目的的说明,代码摘要和视频。

总而言之,RIPS出现日历2018包括:

  • wordpress.org上的一个可疑的存储XSS
  • WordPress核心权限升级
  • 16个易受攻击的插件,总共有超过2100万个活动安装

 打开降临节日历

漏洞类型

入选了我们的到来日历漏洞的类型可以分为两类:发生,因为漏洞1)插件开发者误用WordPress的安全功能和/或完全忘记了清理和2)开发商不具备特权的一个完整的理解WordPress的系统或体系结构。这导致许多特权升级缺陷被揭露。

漏洞起源

让我们更深入地了解这些问题。在大多数情况下,插件开发人员使用WordPress的功能和API,或使用的任何其他框架/ CMS。这通常会导致两种安全问题。

#1滥用框架提供的功能

大多数CMS系统为插件开发人员提供了一系列与安全相关的功能。例如,WordPress提供了多个接口,可以通过用户输入安全地创建SQL查询。WordPress提供的一个功能特别危险:esc_sql()如果在正确的上下文中使用,此功能是安全的。该函数在内部转义所有单引号('),因此可以防止引用字符串中的SQL注入。

安全调用esc_sql()的示例

1
$wpdb->query("SELECT * FROM wp_users WHERE email='" . esc_sql($_GET['email']) . "'");

如果攻击者试图将字符串' OR 1=1 --注入SQL标记,则调用esc_sql将返回\' OR 1=1 --,从而消除用户输入。

但是,如果在没有引号的情况下插入用户输入,则该函数将失败,因为它在错误的上下文中使用

对esc_sql()的不安全调用

1
$wpdb->query("SELECT * FROM wp_users WHERE id=" . esc_sql($_GET['id']));

因为esc_sql()只有单引号,攻击者才能简单地提供字符串1 OR 1=1由于不涉及单引号,因此不会转义任何内容并生成SQL查询SELECT * FROM wp_users WHERE id=1 OR 1=1

出现这样的问题是因为WordPress可能无法提供单一功能来清理任何用户输入的插件,这些插件具有WordPress尚不知道的用例。这种情况导致提供各种特定于上下文的功能,并且缺乏对漏洞和文档不足的理解,往往会导致安全问题。

我们的出现日历的第21天,一个拥有超过700,000个活动安装的插件错误地使用了上述功能。

#2缺乏对CMS架构的理解

通常,插件开发人员使用CMS的功能而不考虑其他组件或插件如何影响他们对此类功能的使用。举一个具体的例子,WordPress为插件开发人员提供了后元API。当WordPress帖子存储在数据库中时,它可以将元信息存储为键值对。为了给出一个虚构的例子,插件可能会跟踪编辑某个帖子的WordPress博客的最后一位作者。为此,当帖子由博客作者更新并保存时,它将执行以下代码。

更新帖子元

123
$post_id = $_POST['post_id'];
$current_user = esc_html($_POST['last_author']);
update_post_meta($post_id, 'fictitious_plugin_last_author', $current_user);

此代码将使用fictitious_plugin_last_author带有用户输入的键更新元条目的值$_POST['post_id']在此示例中,用户输入在将其存储在数据库中之前进行转义和清理。

每当有人使用现在具有更新元条目的ID读取帖子时,插件将通过以下代码向读者显示最后一位作者。

检索后元

12
$post_id = $_GET['post_id'];
echo "This post was last edited by " . get_post_meta($post_id, 'fictitious_plugin_last_author');

这里,post meta值直接嵌入到页面的HTML标记中。但是,由于esc_html()在将其存储到数据库之前对其进行了清理,因此可以成功阻止XSS攻击。

但是,WordPress核心提供了一个ajax回调,允许使用任意的,未经过无限制的输入更新任何未受保护的元条目。虽然插件可以安全地处理并保存已清理到数据库中的用户输入,但它无需进一步清理即可输出。由于攻击者可以简单地使用ajax回调来更新插件信任的数据,因此可以实现存储的XSS。

从WordPress安全月学习

流行的插件Jetpack有超过500万个有效安装,由WordPress背后的公司Automattic开发,犯了这个错误。详细信息将在我们的出现日历第11天公布

为什么发布漏洞很重要

在将漏洞报告给供应商并发布修复程序之后,发布有关漏洞的详细信息对插件的供应商和用户有好处。插件供应商可以从他们的错误和其他人的错误中吸取教训,以保护他们的插件和PHP应用程序。

网站所有者的好处是它为他们提供了一个指标来帮助决定安装或不安装哪些插件。WordPress网站所有者可以选择近50,000个插件来定制他们的网站以满足他们的需求。通过使用插件中漏洞的公共跟踪记录,他们可以估计插件是否可以安全使用。

供应商反应

联系供应商以通知他们软件中的漏洞时,应该会有不同的反应。没有人喜欢因为他们的错误而被召唤出来。大多数插件供应商都很快回复,并且经常在接下来的几天内做出回应。但是,大多数情况下,修补程序版本被推迟到插件的下一个常规版本。这导致未修补的安全漏洞数周,在某些情况下会持续几个月。

网站所有者的后果

WordPress网站所有者可以使用插件和主题自定义其网站的行为和设计。考虑到WordPress插件存储库中有近50,000个可用插件,很明显,捕获所有漏洞是不可能的。这就是为什么网站所有者必须信任他们下载的插件,并且明智地保持列表简短。大型网站通常安装了数十个插件,因为默认情况下WordPress不提供分析,广告或电子商务等功能。一些站点安装了超过50个插件。

应该安装哪些插件?

网站所有者不得不相信插件不会引入安全漏洞的问题将始终存在。直观地说,管理员应该只安装具有良好评论和有关安全漏洞的积极历史的流行插件。此外,似乎很直观的是,大公司开发的商业插件比单个或少数志愿者开发的免费插件更安全。

事实证明,这些指标还不够。出现日历仅包含最流行和最受好评的WordPress插件和商业插件。此外,一些插件是由大公司开发的。这个出现日历在WooCommerce中有8个漏洞,这是一个有超过400万活动安装的电子商务插件,由运行wordpress.com的公司Automattic开发

最好的站点所有者可以做的是最小化安装的插件数量并遵循安全原则,例如使用最少的特权。例如,当网站所有者只想编辑博客帖子时,不必将其作为管理员帐户进行身份验证。具有该author角色的帐户足以完成此任务。如果所有者然后触发例如存储的XSS有效负载,则攻击将无法像站点所有者作为管理员进行身份验证时那样造成伤害。


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明从WordPress安全月学习
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址