插件和主題開發人員:這是您可以從我們的 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 插件和主題提供的驚人功能。