資安雷達 2026 年 9 月 26 日

2026-09-26 — Discord OAuth 未驗證信箱,Flarum 外掛帳號可被接管

primary=https://github.com/advisories/GHSA-g7vj-c29h-3h5m primary=https://github.com/FriendsOfFlarum/oauth/commit/baca3466b3b7be51c70a7e0ba966901aefeb344a

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 綁定發生。

原始來源:GHSA-g7vj-c29h-3h5m、修補 commit


End of article
0
Would love your thoughts, please comment.x
()
x