AlleyPin 翔評互動 內部客戶管理 API 未授權存取,免費帳號即可取得大量診所完整資料(聯絡人、手機、地址、Email、統編),且 VAT 欄位被濫用儲存明文密碼 - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00383
  •  發信 Vendor: 翔評互動股份有限公司
  • Title: AlleyPin 翔評互動 內部客戶管理 API 未授權存取,免費帳號即可取得大量診所完整資料(聯絡人、手機、地址、Email、統編),且 VAT 欄位被濫用儲存明文密碼
  • Introduction: 內部客戶管理 API 存在跨服務 JWT 驗證缺失。

處理狀態

目前狀態

公開
Last Update : 2026/05/26
  • 新提交
  • 已審核
  • 已通報
  • 已修補
  • 已複測
  • 公開

處理歷程

  • 2026/03/22 13:28:11 : 新提交 (由 Marco 更新此狀態)
  • 2026/03/22 13:42:10 : 新提交 (由 Marco 更新此狀態)
  • 2026/03/22 13:47:53 : 新提交 (由 Marco 更新此狀態)
  • 2026/03/25 14:30:20 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/03/26 19:30:27 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/03/26 19:30:27 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/03/26 19:30:27 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/05/14 10:56:48 : 複測申請中 (由 組織帳號 更新此狀態)
  • 2026/05/18 06:17:19 : 新提交 (由 Marco 更新此狀態)
  • 2026/05/18 14:05:59 : 新提交 (由 Marco 更新此狀態)
  • 2026/05/18 14:06:30 : 新提交 (由 Marco 更新此狀態)
  • 2026/05/18 14:09:17 : 新提交 (由 Marco 更新此狀態)
  • 2026/05/18 19:43:12 : 新提交 (由 Marco 更新此狀態)
  • 2026/05/19 12:14:11 : 複測申請中 (由 組織帳號 更新此狀態)
  • 2026/05/25 17:13:18 : 確認已修補 (由 Marco 更新此狀態)
  • 2026/05/26 03:00:13 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2026-00383
  • 通報者: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
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)

相關網址

https://admin.pinmed.co/account/register
https://pinmed.alleypinapis.com/login
https://api.internal.alleypin.cc/v1/clientsmanager

敘述

漏洞描述

AlleyPin 的內部客戶管理 API(api.internal.alleypin.cc)原本應僅供內部員工存取,但因跨服務 JWT 驗證缺失,任何在 admin.pinmed.co 免費註冊的使用者,都能透過取得的 JWT 存取 /v1/clientsmanager 端點,取得大量診所客戶資料。

每筆記錄包含數十個欄位,涵蓋診所名稱、聯絡人姓名、手機號碼、完整地址、Email、統一編號、合約資訊,以及第三方整合相關權杖等敏感資料。

此外,部分記錄的 VAT(統一編號)欄位被誤用儲存非預期內容,構成明文密碼儲存的嚴重安全問題。


重現步驟

Step 1:在 admin.pinmed.co 免費註冊帳號

前往:

https://admin.pinmed.co/account/register

填寫 email 和密碼即可完成註冊,無需額外驗證、付費或診所綁定。


Step 2:取得 JWT Token(有效期 90 天)

curl -s -X POST https://pinmed.alleypinapis.com/login \
  -H "Content-Type: application/json" \
  -d '{"Username":"[email protected]","Password":"your_password"}'

JWT 的 roleuserclients 為空陣列(未綁定任何診所)。

圖片


Step 3:存取內部客戶管理 API

curl -s -H "Authorization: Bearer {JWT}" \
  https://api.internal.alleypin.cc/v1/clientsmanager | python3 -m json.tool | jq | head -60

圖片


實測結果

指標 說明
診所資料 超過 2,000 間診所
每筆欄位數 約 50 個欄位
暴露的 PII 聯絡人姓名、手機、地址、Email、統編
暴露的商業資訊 合約資訊、功能開關、科別、品牌
VAT 欄位含明文密碼 逾六成包含明文密碼
Google OAuth Access Token 多數診所暴露 Google OAuth Token
Facebook Page Token 部分診所暴露 Facebook Page Token
登入帳號欄位 多數診所可取得登入帳號資訊
SMS 剩餘額度 數百萬則簡訊額度

每筆記錄包含的欄位(節錄)

companyName, contactName, cellPhoneNumber, address, email, VAT,
contractStartDay, contractEndDay, category, active, authRole,
adminStoreId, bindingStoreIds, blackList, brands, content,
customerAgeRange, customerExpireDay, facebookStartingNumber,
fbExchangeToken, fbFanPage, fbFanPageToken, fbId, fbReviewLink,
features (analytics, appointNotification, calendar, fbReply, googleReply...),
createdAt, ...

VAT 欄位明文密碼問題

部分記錄的 VAT 欄位包含明文密碼內容:

診所 VAT 欄位內容 問題
OO眼科診所 密碼:[已編輯] 明文密碼
OO牙醫診所 密碼:[已編輯] 明文密碼
OO牙醫診所 [已編輯] 正常統一編號

逾六成的記錄都包含疑似明文密碼資訊。


Facebook Page Token 洩漏

部分診所的 Facebook 粉絲頁存取權杖(fbFanPageToken)可被直接取得。攻擊者可能利用這些權杖:

  • 代替診所發佈 Facebook 貼文
  • 讀取粉絲頁私訊
  • 存取粉絲頁洞察報告
  • 管理粉絲頁設定

Google OAuth Access Token 洩漏

多數診所的 Google OAuth Access Token(googleAccountAccessToken)可被直接取得。

Token 範例格式:

ya29.***

範例:

診所 Token(節錄)
A 牙醫診所 ya29.***
B 牙醫診所 ya29.***

攻擊者可能利用這些權杖:

  • 存取 Google 商家資訊管理功能
  • 修改 Google 商家資料與回覆評論
  • 存取 Google Calendar 排程
  • 存取 Google 帳號已授權的相關服務

其他敏感資料

欄位 說明
登入帳號欄位 可搭配明文密碼進行登入嘗試
Google 帳號識別碼 Google 帳號相關識別資訊
Facebook 帳號識別碼 Facebook 粉專相關識別資訊
SMS 剩餘額度 可被濫用發送大量簡訊
內部備註欄位 含客戶溝通紀錄與內部作業資訊

完整攻擊鏈

admin.pinmed.co/account/register (免費註冊)
  → pinmed.alleypinapis.com/login (取得 JWT, 90天有效)
      ↓
api.internal.alleypin.cc/v1/clientsmanager (取得大量診所資料)
  → 聯絡人姓名 + 手機 + 地址 + Email + 統編
  → VAT 欄位含明文密碼
  → 合約資訊 + 功能開關
  → Facebook / Google OAuth Token
      ↓
可利用明文密碼嘗試登入診所相關後台系統
      ↓
可利用 Facebook / Google OAuth Token 存取第三方整合服務

根本原因

  1. 跨服務 JWT 驗證缺失
    api.internal.alleypin.cc 接受 PinMed Suite 的 JWT,但未驗證 audience / role

  2. Internal API 暴露於外網
    api.internal.alleypin.cc 可從公網直接存取,未限制來源 IP

  3. 欄位用途未受限制
    VAT 欄位被誤用儲存非預期內容,系統未限制欄位用途

  4. 缺乏資料存取控制
    單一 GET 請求即可回傳大量客戶資料,缺乏最小權限與分頁限制

修補建議

1. 緊急: 立即限制 /v1/clientsmanager 的存取權限,僅允許內部管理員
2. 緊急: 清除 VAT 欄位中的所有明文密碼,通知受影響客戶更改密碼
3. 緊急: api.internal.alleypin.cc 限制為內網存取(VPN/IP 白名單)
4. 短期: JWT 加入 audience 驗證,PinMed Suite token 不應被 internal API 接受
5. 短期: 縮短 JWT 有效期(目前 90 天過長)
6. 中期: 實施欄位用途驗證,VAT 欄位應只接受數字格式的統一編號
7. 中期: 加入 API 分頁和速率限制,防止一次性大量資料抓取

擷圖

留言討論

聯絡組織

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