Discord OAuth 未驗證信箱狀態,Flarum 外掛帳號可被接管
GitHub Advisory Database · 2026-09-25
攻擊者只要註冊一個掛著受害者信箱、但信箱未經驗證的 Discord 帳號(改用已驗證的手機號碼繞過),再用它跑一次 Discord OAuth 登入,fof/oauth 外掛就會把這個未驗證的信箱當作已驗證信任,直接綁定並登入對應的 Flarum 論壇帳號,全程不需密碼、也不需受害者任何互動。此漏洞編號為 CVE-2026-92161,CVSS 為 9.8 分(CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H),由 GitHub Advisory Database 於 2026-09-25 發布,弱點所在套件為 FriendsOfFlarum/oauth。
漏洞機制
Flarum 的 OAuth 登入流程有個關鍵前提:外掛必須自行判斷第三方回傳的信箱是否「已驗證」,只有已驗證的信箱才能呼叫 provideTrustedEmail() 直接綁定既有帳號;未驗證的信箱理應只能呼叫 suggestEmail(),讓使用者手動確認後才綁定。fof/oauth 的 Discord provider 在處理回傳資料時,完全略過了 Discord 回傳的 `verified` 欄位判斷,不論信箱是否驗證都直接視為可信。
Discord 平台本身允許帳號在「手機號碼已驗證」的情況下,掛一個未驗證的 email 地址完成註冊。攻擊者只要知道受害者在論壇上使用的信箱,就能開一個新 Discord 帳號填入該信箱、驗證手機號碼跳過信箱驗證,再對目標論壇發起 Discord OAuth 登入。由於外掛不檢查 `verified` 狀態,Flarum 後端會認為「這是一個已驗證、且與現有帳號信箱相符的登入」,於是把 Discord 帳號連結到受害者的 Flarum 帳號,攻擊者因此取得該帳號的完整存取權,包含管理員帳號在內。
攻擊前提相對寬鬆:論壇需啟用 Discord 登入、攻擊者需知道目標信箱、且該信箱尚未被目標使用者自行綁定過 Discord。由於整條鏈路不需要受害者密碼、不需要點擊任何連結,是一次性、無需互動的帳號接管,因此被評為 CVSS 9.8 的重大等級。
受影響版本
受影響範圍涵蓋 fof/oauth 的穩定版與 2.x 測試版,官方已在對應版本修補:
- 受影響:
fof/oauth<1.7.4 - 受影響:
fof/oauth>=2.0.0-beta.1且 <2.0.0-beta.4 - 已修補:
1.7.4 - 已修補:
2.0.0-beta.4
修補與緩解
受影響對象是所有安裝 fof/oauth 並啟用 Discord 登入方式的 Flarum 論壇管理者,尤其是允許使用者以 Discord 帳號綁定或建立既有帳號的站台。官方修補提交(commit baca346)在 Discord provider 中加入了對 `verified` 欄位的檢查,只有信箱確實已驗證才會信任並自動綁定:
// 修補前
$registration->provideTrustedEmail($email);
// 修補後
$payload = $user->toArray();
if ($payload['verified'] ?? false) {
$registration->provideTrustedEmail($email);
} else {
$registration->suggestEmail($email);
}管理者應盡快將 fof/oauth 升級到 1.7.4(穩定線)或 2.0.0-beta.4(beta 線)。若短期內無法升級,官方建議的暫時緩解措施是在外掛設定中直接停用 Discord 登入選項,直到完成升級為止;同時可稽核既有帳號的 OAuth 綁定紀錄,確認是否已有異常的 Discord 綁定發生。