一批數量驚人的CMS插件和PHP庫正在禁用SSL/TLS證書驗證

上週,ZDNet的Catalin Cimpanu報告了一個首先由Paragon Initiative Enterprise的Scott Arciszewski提出來的問題:一批數量驚人的CMS插件和PHP庫正在禁用SSL/TLS證書驗證。

“更糟糕的是,許多這些插件和庫都被用來建立了與付款服務器的連接,通過這些服務器,他們之後就可以傳輸敏感的用戶數據或處理金融交易。”

其結果是,由於大量插件的作者不正確的配置,那些與建立在內容管理系統(如WordPress)上的熱門網站進行交互的、數以百萬計的互聯網用戶可能就會受到***。

因此,這是什麼意思呢?爲什麼會有這樣的麻煩?你能做些什麼來確保你不會在不經意間危害你的客戶?

讓我們來討論一下。
內容管理系統及其插件和庫的簡要介紹

讓我們從頭開始。不同於建立他們自己的解決方案,許多網站都會依賴一個可以根據其需要進行配置的、現成的CMS(如WordPress、Drupal等)。我們爲Hashed Out也採用了一個CMS。SSL Store在自己搭建的、由我們的開發團隊進行管理的CMS上運行,但是考慮到Hashed Out每天都需要發佈文章,我們使用的是WordPress。

許多這些CMS平臺最吸引人的特性之一是,它們所使用的插件和庫能夠幫助你避免構建自己的web應用程序和進行大量額外的開發工作。這些插件的優點是,當它們正常工作時(大多數都是這樣),它們能夠幫助你節省大量的時間和精力。缺點是由於你對第三方過於信任,以至於當第三方犯了錯誤時,會傷害到你的網站和用戶。

既然我們已經討論到了這一點,讓我們來討論一下這些插件和PHP庫的問題。
錯誤配置的代碼和cURL選項

cURL是一個庫和命令行工具,廣泛存在於現代服務器上。它主要是用於在遠程服務器之間來回傳輸數據,並被打包成許多CMS插件和PHP庫。很多時候,系統都更傾向於使用cURL,而不是打開一個實際的瀏覽器會話來進行連接。

cURL支持許多協議,但與本文最密切相關的兩個協議是HTTPS和SSL/TLS。

讓我們來看一個實際的例子。假設你正在運行一個WordPress網站,而該網站會使用一個插件來將支付卡信息傳輸到付款提供商的服務器上。典型的做法是通過爲HTTPS配置的cURL——cURL還能處理連接的SSL/TLS身份驗證問題。

“但是Arciszewski最近發現,當cURL用來通過HTTPS連接下載或發送數據時,許多CMS插件和PHP庫的開發人員都會禁用cURL安全特性。”

這顯然是有問題的,因爲禁用以下任何一種設置都可能導致無數問題。

第一個設置是“CURLOPT_SSL_VERIFYPEER”,它應該設置爲真(或者值爲1)。不幸的是,許多插件都將其設置爲了假(0),這意味着它遭到了禁用,cURL將不再驗證它所連接的網站的URL。我真的覺得所有人都不需要很多額外的上下文,就能理解爲什麼這句話是非常危險的。

當“CURLOPT_SSL_VERIFYPEER”被設置爲假時,cURL與網站進行連接所需的唯一東西就是一個有效的SSL/TLS證書。無論誰發行了它,無論它是否是來自可以任意進行簽發的免費CA的免費DV證書,只要它是有效的,cURL就會連接。

另一個被錯誤配置的cURL設置是“CURLOPT_SSL_VERIFYHOST”。這也依賴於一個值。它應該設置爲2,因爲系統需要對服務器的SSL/TLS證書進行更嚴格的驗證。許多插件都將其設置爲了0,這意味着cURL甚至將可以接受自簽名證書。同樣,不需要太多的上下文我們就可以理解爲什麼這是十分危險的——尤其是當我們討論付款插件時。
爲什麼會這樣,我能做什麼?

讓我們從原因開始。對於這些插件和庫的創建者來說,這與其說是一種惡意行爲,不如說是一種逃避行爲。當這些插件和庫配置了更多的安全優先的關注時,它們往往會產生一些錯誤,而這些錯誤會對用戶提出警告。這是很糟糕的,尤其是當轉化率處於平衡狀態時。

因此,爲了避免錯誤消息和警告所帶來的負面影響,這些創建者便將賭注下在了無知是福上,並且禁用了這些特性以避免引起公衆注意。

“正如Arciszewski所闡釋的那樣,這些錯誤的原因是,cURL需要根據已知的和有效的SSL/TLS證書列表來驗證遠程HTTPS服務器的證書。在許多地方都可以下載到真實證書頒發機構(一些允許頒發SSL/TLS證書的組織)列表。不幸的是,部分web託管服務根本不會存儲這個列表,同時許多服務器會將其存儲在不同的服務器位置上,這就使得爲能夠在所有服務器上無縫工作的CMS插件和PHP庫配置cURL設置變得不可能了。”

爲了解決這個問題,Arciszewski創建了一個名爲Certainty的自定義PHP庫,該PHP庫可以從cURL主頁定期下載一個名爲CACERT.pem的文件,並將它託管在本地,以便所有網站都能夠擁有最新的CA列表。

對於我來說,一個起源於一些簡單的事情(如服務器沒有一個有效的CA列表),但卻可能帶來真正災難性後果的問題總是很好笑的。

但是,如果你在CMS上運行你的網站,並且你擔心你的某個插件可能出現問題,請嘗試Scott的解決方案。你是絕對承受不起SSL/TLS加密遭到破壞的嚴重後果的。

來源:https://www.wosign.com/News/news_2018111401.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章