WordPress 的 Better Search Replace 外掛程式中發現並修復了一個嚴重漏洞,該外掛程式擁有超過 100 萬個活躍網站安裝。 成功的攻擊可以導致任意檔案刪除、敏感資料復原和程式碼執行。
漏洞的嚴重程度
漏洞的嚴重性按照評分系統進行評分,評級從低到嚴重:
- 低0.1-3.9
- 平均4.0-6.9
- 高7.0-8.9
- 嚴重9.0-10.0
Better Search Replace 插件中發現的漏洞的嚴重性被評為“嚴重”,這是最高級別,在 1-10 嚴重性等級上得分為 9.8。
Better Search 取代 WordPress 插件
該插件由 WP Engine 開發,但最初是由被 WP Engine 收購的開發公司 Delicious Brains 創建的。 Better Search Replace 是一款流行的 WordPress 工具,可簡化並自動化在 WordPress 網站資料庫上執行搜尋和替換任務的過程,這在網站遷移任務或伺服器中非常有用該插件有免費和付費專業版。
該插件網站列出了免費版本的以下功能:
- 「對所有表格的序列化支持
- 選擇特定表格的可能性
- 能夠運行“試運行”以查看將更新多少字段
- 除了正在運行的 WordPress 安裝之外,沒有伺服器要求
- WordPress 多網站支援”
付費專業版具有附加功能,例如追蹤更改內容的能力、在插件運行時備份和導入資料庫的能力以及擴充的支援。
該插件之所以受歡迎,是因為它的易用性、實用性以及作為值得信賴的插件的歷史。
PHP物件注入漏洞
在 WordPress 上下文中,當使用者提供的輸入未進行不安全序列化時,就會出現 PHP 物件注入漏洞。 反序列化是將物件的字串表示形式轉換回 PHP 物件的過程。
非營利性開放全球應用程式安全專案 (OWASP) 提供了 PHP 物件注入漏洞的概述:
「PHP物件注入是一個應用程式級漏洞,攻擊者可以根據上下文執行各種類型的惡意攻擊,包括程式碼注入、SQL注入、路徑遍歷和應用程式拒絕服務
當使用者提供的輸入在傳遞給 PHP unserialize() 函數之前未經過正確清理時,就會出現此漏洞。 由於 PHP 允許物件序列化,因此攻擊者可以將臨時序列化字串傳遞給對 unserialize() 的易受攻擊的調用,從而導致將 PHP 物件任意注入到應用程式範圍中。
要成功利用 PHP 物件注入漏洞,必須滿足兩個條件:
- 應用程式必須有一個實作 PHP 魔術方法(例如 __wakeup 或 __destruct)的類,該方法可用於執行惡意攻擊或啟動「POP 鏈」。
- 攻擊期間使用的所有類別都必須在呼叫易受攻擊的 unserialize() 時聲明,否則必須支援這些類別的自動物件載入。
如果攻擊者可以載入(注入)一個條目以包含他們選擇的序列化對象,他們就可以執行任意程式碼或危及網站的安全。 如上所述,此類漏洞通常是由於用戶輸入的清理不當而引起的。 清理是驗證輸入資料的標準過程,因此只允許預期類型的輸入,拒絕和阻止不安全的輸入。
對於 Better Search Replace 插件,該漏洞是在搜尋和取代操作期間處理反序列化的方式中暴露的。 此場景中缺少的一個關鍵安全功能是 POP 鏈,它是一系列連結的類別和函數,攻擊者可以使用它們在物件未序列化時觸發惡意操作。
儘管 Better Search Replace 外掛程式不包含此字串,但風險仍然存在,如果同一網站上安裝的另一個外掛程式或主題包含 POP 字串,則可能允許攻擊者發動攻擊。
Wordfence 描述了該漏洞:
「WordPress 的 Better Search Replace 外掛很容易透過不受信任的輸入反序列化在 1.4.4 及之前的所有版本中受到 PHP 物件注入的攻擊。
這使得未經身份驗證的攻擊者可以注入 PHP 物件。易受攻擊的插件中沒有 POP 字串。 如果目標系統上安裝了額外的插件或主題,則存在 POP 鏈,攻擊者就可以刪除任意檔案、檢索敏感資料或執行程式碼。”
針對這項發現,WP Engine 迅速解決了這個問題。 2024 年 1 月 18 日發布的版本 1.4.5 更新的變更日誌條目強調了所採取的步驟:
“安全性:在搜尋和替換操作期間反序列化物件現在會傳遞 ‘allowed_classes’ => false,以防止物件實例化並可能執行儲存在資料庫中的惡意程式碼。”
此更新是在 Wordfence 於 2023 年 12 月 18 日負責任地披露漏洞之後進行的,隨後 WP Engine 開發並測試了該修復程序。
因應措施
Better Search Replace 外掛程式使用者需要立即更新至最新版本,以保護其網站免受不必要的活動的影響。