有 2FA 一樣可俾人改密碼:漏洞藏喺重設流程同 session
Tech News

有 2FA 一樣可俾人改密碼:漏洞藏喺重設流程同 session

圖片:via iThome — https://www.ithome.com.tw/news/178303
TechLab 編輯部(譯)·

台灣政府網站個案揭出前後端驗證斷層,管理帳號亦受影響

台灣有政府機關網站明明開咗雙重驗證,攻擊者仍然改到密碼,連管理帳號都入到。據 iThome 報道,台灣資安署喺 2026 年 7 月資安月報拆解咗兩宗驗證失效個案。涉事網站冇公開,受影響人數、系統框架同入侵後做過咩亦未交代,所以暫時唔應該推斷事件規模;不過已知嘅漏洞模式,好值得所有有會員或後台登入功能嘅網站逐項檢查。

驗證碼送到瀏覽器,等同直接交鎖匙

第一宗個案用電郵驗證碼重設密碼,但驗證碼同時以明文藏喺網頁原始碼。攻擊者只要知道目標電郵地址,打開開發者工具就睇到個碼,根本唔使入信箱。第二宗更完整:攻擊者先檢視自己送出嘅 request,搵到改密碼 endpoint;server 冇確認佢完成身份驗證,照樣接受新密碼。跟住登入時,網站又喺 response 入面直接交出 OTP,兩關就咁逐關跳過。

呢度講嘅「攔截」唔代表有人破解 TLS,亦未必涉及偷聽第三方流量。用瀏覽器開發者工具或一般測試 proxy,任何人都睇到自己裝置送出同收到嘅 request、response。前端收到嘅資料,用戶就有辦法讀到同修改;hidden field、停用咗嘅按鈕、JavaScript 狀態全部唔算保安邊界。驗證結果一定要由 server 保存同判斷。

2FA 個招牌,保護唔到另一條入口

網站通常花最多心機守登入頁,帳戶復原功能就由另一組程式處理。問題係,重設密碼本身已經可以奪走帳戶控制權,安全級別最少要同登入流程睇齊。OWASP 亦提醒,MFA 要覆蓋一般登入、敏感設定、復原流程、API 同其他登入渠道;其中一條路少咗檢查,攻擊者自然揀嗰條行。

今次亦顯示,畫面有兩個輸入步驟唔等於系統真係驗咗兩次。server 要記錄每個 challenge 屬於邊個帳號、用喺咩操作、幾時到期、用過未,仲要綁定指定嘅受限制 session。若果 /reset-password 淨係收到帳號 ID 同新密碼就照做,前一頁個驗證碼填得幾靚都冇用。OTP 同 reset token 本身未見俾人計中;網站只係錯手將秘密交咗出去。

重設完成之後,舊 session 都要收走

改咗密碼唔代表已登入裝置會自動失效。若果攻擊者早已攞到 session cookie,或者重設流程直接建立完整登入狀態,單改資料庫入面個 password hash 未必趕得走佢。台灣資安署建議重設後即時令憑證失效、終止原有 session,再要求用戶經正常流程輸入新密碼同 OTP;OWASP 亦建議重設完唔好自動登入,同時要撤銷現有 session。

管理帳號尤其要做得乾淨:密碼、MFA 裝置、復原電郵或權限有變,應該輪換 session ID,清走其他登入 token,同時用獨立渠道通知帳戶持有人。通知信唔可以附上新密碼,亦唔應該放一條撳完就回復舊設定嘅高權限連結。系統亦要記錄邊個帳號、IP、裝置同時間做過改動,方便 IT 團隊追查異常。

網站管理員而家可以檢查咩

先由瀏覽器開始。 開一次完整忘記密碼同 2FA 登入流程,逐個查看 HTML、JSON response、hidden field、localStorage、cookie 同錯誤訊息,確認冇 reset token、OTP 或「已驗證」旗標流到前端。跟住直接呼叫每個 endpoint:跳過驗證步驟、改 account ID、重播舊 token、換另一個 session、同時開兩次重設流程,server 都應該拒絕。

再檢查 token 狀態。 Reset token 同 OTP 要用安全隨機方式產生,限時、單次使用,綁定指定帳號、指定用途同指定 challenge;成功或過期後立即作廢。輸錯次數亦要有限制,但限制應按帳號同 challenge 計,避免攻擊者只換 IP 就繼續撞碼。回應內容同處理時間亦應保持一致,減少俾人試出邊啲電郵已註冊。

最後驗 session 同權限。 未完成第二關嘅 session 只可以存取驗證 endpoint,其他 API 一律要由 server 再驗身份同角色。密碼重設後,要測試舊 cookie、手機 app token、remember-me token、SSO session 同後台分頁仲用唔用到。公司、學校、網店同機構網站如果只檢查登入畫面,今次正好係一次提醒:帳戶復原、管理設定同 API 都要放入同一套驗證測試。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook