這篇文章將分析近期發生在 WordPress 插件 Funnel Builder 中的一個嚴重安全漏洞。對於開發者來說,這個案例非常典型,它展示了當後端 API 缺乏權限驗證與輸入過濾時,攻擊者如何將其轉化為前端的支付數據竊取攻擊。
漏洞背景與技術原理
Funnel Builder 是一款用於 WooCommerce 的銷售漏斗插件,旨在優化結帳流程以提高轉單率。然而,在版本 3.15.0.3 之前的所有版本中,該插件存在一個致命的設計缺陷。
問題出在插件提供了一個公開的結帳端點(Checkout Endpoint)。在正常的設計中,端點應該接收請求並執行特定的內部方法。但該插件的舊版本在處理請求時,完全沒有檢查呼叫者的權限(Authentication),也沒有限制可以被呼叫的內部方法清單。
這在安全工程上被稱為失效的存取控制(Broken Access Control)。攻擊者可以發送一個精心構造的未經認證請求,直接觸發插件內部的特定方法,而這個方法恰好具有寫入插件全域設定(Global Settings)的權限。
從漏洞到攻擊的路徑
當攻擊者發現可以任意修改全域設定後,他們鎖定了插件中的外部腳本(External Scripts)設定項。這個設定項原本是用來讓店主加入分析工具(如 Google Analytics)的,它會將定義的 JavaScript 程式碼注入到所有結帳頁面中。
攻擊流程如下:
首先,攻擊者利用未經認證的端點漏洞,將惡意 JavaScript 程式碼寫入插件的外部腳本設定中。
其次,為了規避管理員或安全工具的檢查,攻擊者採取了偽裝策略。他們將惡意程式碼偽裝成 Google Tag Manager(GTM,一種常用的標記管理工具)的載入腳本。對於大多數網站管理員來說,看到 GTM 相關的代碼是非常正常的,因此很容易被忽略。
最後,這段偽裝腳本會在用戶進入結帳頁面時執行,並透過 WebSocket(一種全雙工通訊協定,允許伺服器主動推送數據給客戶端)連接到攻擊者的 C2 伺服器(Command-and-Control Server,指令控制伺服器)。C2 伺服器會根據受害網站的特性,動態推送最適合的 Skimmer 腳本。
什麼是 Checkout Skimming
這類攻擊被稱為 Skimming(刷卡盜取),在電子商務領域中,這通常與 Magecart 攻擊組織相關。其核心目的不是癱瘓網站,而是靜默地在前端監控用戶輸入。
當用戶在結帳頁面輸入信用卡號碼、CVV 驗證碼以及帳單地址時,惡意 JavaScript 會在即時攔截這些輸入內容,並將其傳送到攻擊者的伺服器。由於攻擊發生在用戶的瀏覽器端(Client-side),後端伺服器可能完全沒有任何異常日誌。
實務影響與防禦建議
這次漏洞影響了超過四萬家 WooCommerce 店鋪,顯示出插件生態系中權限管理不嚴謹的風險。
對於開發者的建議:
第一,絕對不要信任任何來自客戶端的請求。所有能修改系統設定或數據的端點,必須強制執行嚴格的身份驗證與權限檢查。
第二,實施白名單機制。如果一個端點需要執行多種內部方法,應該定義一個允許執行的方法清單,而非允許呼叫任何內部函數。
第三,監控前端資源。網站管理員應定期檢查設定中的外部腳本,並考慮部署內容安全策略(Content Security Policy, CSP),限制瀏覽器只能加載來自信任網域的腳本,從而阻斷惡意腳本與 C2 伺服器的連線。
目前 FunnelKit 已在 3.15.0.3 版本中修復此漏洞。受影響的用戶應立即更新插件,並檢查 設定 > 結帳 > 外部腳本 中是否有不熟悉的程式碼。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。