2026 年 6 月,安全圈盯上一個技術上「很笨、後果很重」的漏洞:CVE-2026-4020,存在於安裝量約 10 萬站的 WordPress 寄信外掛 Gravity SMTP。Wordfence 給的分數是 CVSS 5.3,但部分來源(含 NVD 的 CVSS v3.1)評為 7.5「高危」——這個分數分歧本身就是今天的重點。它讓任何未登入的訪客,對著一個 REST API 端點發一個請求,就能拿回約 365 KB 的 JSON,裡面包含郵件服務憑證、資料庫資訊與整個軟體堆疊細節。Wordfence 表示,自 5 月初活動開始以來,光它就擋下超過 1,700 萬次利用嘗試。
技術原理很單純,也正因此致命。Gravity SMTP 註冊了一個 REST 端點 /wp-json/gravitysmtp/v1/tests/mock-data,它的 permission_callback 無條件回傳 true——也就是「誰來都放行」,沒有任何身分檢查。攻擊鏈短到不像話:攻擊者直接對該 URL 發 GET 請求 → 端點吐回完整系統報告 JSON → 內含 SMTP / Mailjet / Zoho / Amazon SES / Resend 等郵件連接器的 API 金鑰與密鑰、資料庫細節、PHP 與 WordPress 版本、已載入擴充、document root 路徑、啟用中的外掛與佈景。不需要登入、不需要任何前置條件、不需要使用者互動,PoC 等於就是「打開那個網址」。
受影響範圍:Gravity SMTP 2.1.4(含)以前的所有版本,安裝量約 10 萬站。揭露時間軸也很清楚——Wordfence 於 5 月 22 日部署偵測、5 月 27 日觀察到第一次真實世界利用、6 月 1 日該活動已被歸類為「背景雜訊」,意味著它已被併進大規模自動掃描的例行公事。修補很簡單,但「修了還不夠」才是麻煩,下文會解清楚為什麼你補完外掛還得做第二件事。
技術細節:漏洞類型與攻擊路徑
這是一個典型的「破損的存取控制(Broken Access Control)+ 敏感資訊揭露」。WordPress 的 REST API 用 permission_callback 決定誰能呼叫某個路由;正確做法是回傳一個權限檢查(例如 current_user_can('manage_options'))。Gravity SMTP 在這個 mock-data 測試端點上把它寫成無條件 true,等於把一個「本來只該開發者測試用」的內部端點,曝露給全世界。攻擊複雜度極低(單一未認證 HTTP 請求)、不需認證、非互動式。模擬一個無害的請求大致長這樣:
# 僅示意攻擊面,請勿對未授權目標執行
curl -s "https://victim.example/wp-json/gravitysmtp/v1/tests/mock-data"
-H "Accept: application/json"
# → 回傳含郵件憑證、DB 資訊、系統堆疊的 ~365KB JSON
修補後的 2.1.5 把這個端點的 permission_callback 改回正確的權限檢查。
三類讀者的立刻行動
- 系統管理員:立刻把 Gravity SMTP 升到 2.1.5 以上;補完後立即輪換該外掛連接器內設定的所有 API 金鑰、密鑰與 OAuth token(因為它們可能已外洩)。在 WAF 上暫時封鎖
/wp-json/gravitysmtp/v1/tests/mock-data路徑。 - 開發者(程式碼層級):全面 grep 自家外掛/佈景的
permission_callback,找出任何return true;的路由,改為實際權限檢查;對「測試/mock」端點一律加WP_DEBUG或環境旗標保護,別讓它出現在 production。Nginx 可加一條規則直接擋掉該路徑。 - 接案商/顧問:盤點所有受託維運的 WordPress 站是否裝了 Gravity SMTP;對受影響客戶寄出通告(已修補 + 已輪換金鑰)。把「外掛資產清單 + 緊急輪換金鑰」做成標準看護動作。
補丁 vs 緩解措施對照
| 情境 | 立即補丁 | 無法立即補丁時的緩解 |
|---|---|---|
| 已能升級外掛 | 升到 Gravity SMTP ≥ 2.1.5 | — |
| 暫時無法升級 | — | 在 Nginx/WAF 封鎖 /wp-json/gravitysmtp/v1/tests/mock-data,或停用該外掛 |
| 已可能外洩 | 升級後立即輪換所有郵件連接器 API 金鑰/密鑰/OAuth token | 同左(金鑰輪換不可省) |
| 長期 | 建立外掛資產清單與每週更新窗口 | 導入 WAF + 檔案完整性監控 |
IOC 與威脅情資
- 可疑請求路徑:
GET /wp-json/gravitysmtp/v1/tests/mock-data(短時間內大量、來自不同來源 IP)。 - 回應特徵:約 365 KB 的 JSON 回應,含
api_key、secret、smtp等欄位。 - 後續濫用跡象:你的 SMTP/SES/Mailjet 帳號出現非預期寄信量、寄信來源 IP 異常、帳單暴增——代表金鑰已被拿去發垃圾信。
- 檢查方式:撈 access log 過濾上述路徑,比對首次命中時間是否早於你的修補時間(若是,視同已外洩,務必輪換金鑰)。
不會告訴你的事
第一,分數會騙你。Wordfence 給 5.3、NVD 的 CVSS v3.1 給 7.5——如果你只看「中危 5.3」就排到下個月再修,等於忽略了「未登入、零互動、10 萬站、API 金鑰直接外洩」這個真實風險。CVSS 是參考,暴露面與資料敏感度才是決策依據。第二,「升級外掛」常被當成終點,但這個漏洞外洩的是憑證——補完不輪換金鑰,等於換了門鎖卻沒換被複製的鑰匙。攻擊者手上那把金鑰,補丁管不到。
這代表的更大趨勢
從 5 月 27 日首次利用到 6 月 1 日變「背景雜訊」,只花了幾天——這就是 2026 漏洞的常態:揭露到被併進自動掃描的時間,正在被壓縮到以「天」計。手動「下個 patch window 再說」的維運節奏,對著這種速度已經失效。WordPress 外掛生態的「測試端點忘了關權限」也不是個案,它反映的是「方便的內部端點」與「production 安全」之間長期的張力。
常見問題 FAQ
我升級了 Gravity SMTP,是不是就安全了?
升級擋住了「未來」的利用,但這個漏洞外洩的是 API 金鑰與憑證。如果你的站在修補前就被掃過(多數 5 月底之後上線的站都可能被掃),那些金鑰要當作已外洩——務必把外掛裡設定的所有郵件連接器金鑰、密鑰、OAuth token 全部輪換。
CVSS 只有 5.3,可以排後面再修嗎?
不建議。5.3 是 Wordfence 的評分,NVD 的 CVSS v3.1 給到 7.5「高危」。考慮到「未登入、零互動、10 萬站、外洩的是憑證」,實務風險遠高於「中危」給人的印象。請當高優先處理。
我不確定站上有沒有裝這個外掛怎麼辦?
到 WordPress 後台「外掛」清單搜尋 Gravity SMTP,或請維運方提供完整外掛資產清單。同時撈 access log 過濾 /wp-json/gravitysmtp/v1/tests/mock-data,看有沒有被打過。
金鑰外洩後最可能的損害是什麼?
最常見是你的郵件服務(SES/Mailjet/SMTP)帳號被拿去大量發送垃圾信或釣魚信,導致帳單暴增、寄信信譽受損、網域被列黑名單。輪換金鑰 + 檢查近期寄信量是止血關鍵。
我的觀點
業界的反射動作是「快升級外掛」,但對這個案子,升級只是上半場。我的判斷是:2026 的 WordPress 維運,真正的能力差距不在「補得多快」,而在「能不能在補完的同一小時內把外洩的憑證輪換掉」。多數中小企業沒有外掛資產清單、不知道哪台站用了哪個郵件連接器、更沒有金鑰輪換的 SOP——這正是 ScriptWalker 這種接案工作室的客戶看護機會:把「外掛資產盤點 + 緊急金鑰輪換 + 事件通告範本」打包成月費看護服務的固定動作。當揭露到實戰利用只剩幾天,客戶買的不是「你寫得好」,而是「出事時你那一小時在不在」。