插件和主题开发人员:这是您可以从我们的 SDK 安全漏洞中学到的东西

已发表: 2019-03-02

本周对我们的团队来说非常紧张,因为我们必须处理一个安全漏洞。 安全是我们的首要任务,这是四年来我们 SDK 中发现的第一个重大漏洞。 不幸的是,就像任何软件一样——开发人员也是人,所以无论你是独立开发人员、20 人的主题商店还是谷歌,都会发生错误。 本文的目的首先是透明度,但也让您深入了解我们如何处理事件以及您可以从中学到什么。

2019 年 2 月 25 日星期一,我们收到了一封来自一位乐于助人的开发人员的支持电子邮件,他偶然发现了 WooCommerce 存储库上的 GitHub 问题。 该问题是由一家小型托管公司的代表创建的,该公司注意到其服务器上存在可疑活动。 该代表包括表明两个潜在攻击的相关活动日志,其中一个是针对运行 Freemius SDK 的插件。

由于我们非常重视安全性,我们立即进行了彻底的调查,并确认该漏洞确实存在于我们的 SDK 中。

由于漏洞的严重性,我们立即开始着手修复。 仅仅几个小时后,我们发布了一个补丁标签,并通知所有使用易受攻击的 SDK 版本的开发人员尽快更新他们所有产品的 SDK。 我们还更新了最初的 GitHub 问题,让 WooCommerce 团队知道它(我们在几个小时后删除了 GH 问题以减少曝光)。

为了减少曝光并给每个人一些“宽限期”来更新到固定版本,我们问了开发者两件事:
(a) 如果此安全升级将包含在您的变更日志中,请仅使用“安全修复”等通用措辞。
(b) 即使在更新和发布补丁版本之后,也请不要在接下来的 30 天内披露此问题,以便我们的所有合作伙伴及其用户有足够的时间进行更新。

仅仅一天之后,一个涵盖插件漏洞(故意不链接到它们或提及它们的名字)的网站发布了关于该漏洞的帖子,包括有关如何利用它的信息,同时命名了一些受影响的插件。 这让我们感到意外,因为我们刚刚在不到 24 小时前通知了插件和主题开发人员该问题。 他们没有联系我们,也没有遵循负责任的披露市场惯例,我们认为这是非常不负责任和不道德的。

我联系了他们,要求暂时取消发布该报告以减少曝光,并让我们的开发人员及其用户有机会在补丁版本引起更多黑客不必要的关注之前更新到补丁版本。 但是我与之交流的那个人,从不暴露他们的名字(我问他们),有他们自己的正义思想,似乎常识对他们没有真正的吸引力。 我确实尝试向许多开发人员和用户解释存在问题的情况和增加的风险,但我的努力被置若罔闻,我意识到我的电子邮件交换只是浪费时间。

当我们的开发者社区将他们的插件和主题更新到我们发布的新补丁 SDK 时,我们发现了两个问题:

  1. 一些开发者没有收到我们的提醒邮件,因为他们注册 Freemius 时使用了一个他们没有检查的电子邮件地址。
  2. 我们故意没有将修补后的 GitHub 标签标记为正式版本,以避免引起注意。 但是,我们了解到,使用 Composer 更新其库的开发人员没有获得最新的更新,因为 packgist 只获取版本,除非明确指定标签。

为了克服这些问题:

  1. 由于该漏洞已经公开发布,两天前我们将修补版本标记为正式版本,以便依赖于 packgist 的开发人员能够更新。
  2. 今天早上早些时候,我们通过电子邮件向尚未更新其所有产品的 SDK 的开发人员发送了另一批消息。 这次我们将消息发送到他们的官方支持渠道,以增加每个人正确接收电子邮件的机会。

尽管我们想将这个漏洞的发布至少推迟两周,但在他们发表自己关于该主题的文章之前,我们收到了 WP Tavern 的进一步询问,询问我们的意见,这是压垮开发人员键盘的稻草。

我们犯的错误以及您可以从中学到什么

回顾这一事件,我们犯了几个我们可以轻松避免的错误,并且会让每个人的生活变得更轻松。

进入静音模式,只提醒需要知道的人

由于我们非常渴望尽快解决问题,因此我个人犯了一个“新手”错误,过早地引起了不必要的关注。 我继续将修复提交到我们用来管理 SDK 的 GitHub 存储库。 不仅存储库是公开的,而且我解释了修复并在其中使用了“安全”一词。

更好的方法是创建存储库的私有/封闭版本,修补那里的安全问题,并仅将其公开给相关开发人员而不是将其公开。 这不会引起“漏洞猎人”的注意。

不要将精力浪费在“安全巨魔”上

第二个错误是试图与发布该漏洞的网站背后的公司进行交互。 这完全是浪费时间和精力,只会引发更多的对抗,最终导致另一个关于该漏洞的帖子。 我会说一个很好的指标来决定是否值得你花时间联系一个冒着插件或主题用户风险的帖子的作者,是帖子/网站/公司后面是否有名字。 如果他们躲在代理人身后并且行为不理性,那么您可以与他们交谈的机会几乎为零。

所以这是我的建议——进入静默模式,只通知必须知道该漏洞的人。 在插件/主题的情况下,那是您的用户。 这也是一个强调收集用户电子邮件重要性的好机会。 如果您无法与用户私下交流,那么您就没有有效的方式私下通知他们有关安全问题的信息。

事件的现状

超过 60% 的使用我们 SDK 的开发者已经升级到补丁版本。 此外,SDK 带有一种特殊机制,如果其中一个产品已经更新,则允许安装在同一 WordPress 网站上的多个 Freemius 支持的插件或主题使用最新版本的 SDK。 所以这很好。

也就是说,仍有许多网站易受攻击。 这就是为什么我没有提及有关漏洞本身的任何技术细节,也没有提及受影响的产品。 我们仍然希望为我们的开发人员提供修补他们的产品并允许他们的用户更新到安全版本的机会。

如何降低 WordPress 插件/主题中的安全风险?

如果你没有任何安全背景,谷歌“网络安全最佳实践”,你会发现大量的文章和实践。 阅读其中一些以了解现代和典型的潜在风险和错误。 在开发和测试过程中牢记这些。 另一个好的做法是聘请安全研究人员进行定期安全审计。 它将花费几百美元,但如果您依靠您的产品作为主要收入来源,那是不费吹灰之力的。

不幸的是,就像我们的情况一样,坏事仍然可能发生。 尽管我们拥有非常强大的安全背景,但我们会进行彻底的代码审查并与来自 HackerOne 社区的经验丰富的安全研究人员合作,但这个漏洞仍然从裂缝中溜走。 😔

我认为它发生的原因之一是因为易受攻击的代码实际上是为了调试边缘情况而添加的,而不是 SDK 核心功能的一部分。 因此,如果这里有教训,请以同样的方式对待产品中的任何代码,无论它是实际业务逻辑的一部分还是其他任何内容。

回顾

在软件世界中,安全问题是不可避免的。 不管我们/你喜欢与否,总有一天你的插件或主题会出现安全问题。 问题可能出在您的代码、您正在使用的库/框架、提供意外结果的 WordPress 核心方法以及更多场景中。

当它发生时(我希望它不会发生),不要压力过大(我们确实做到了)并冲动行事——它只会造成更大的伤害。 起草一个方法恢复计划,通知受影响的各方,帮助您的用户保护他们的网站。 每个人都知道发生安全问题,更重要的是您如何处理这种情况。

话虽如此,我们代表整个 Freemius 团队对给您带来的不便深表歉意,并将在整个周末都在这里提供支持、建议或与该问题相关的任何其他帮助。 而对于我们的新用户来说,我知道第一印象是多么重要,这绝对不是一个好印象。 我希望您再给 Freemius 一次机会,并且随着时间的推移,看看我们为您的 WordPress 插件和主题提供的惊人功能。