goHardDrive 洩漏數千名顧客個資
我最近向專門販售二手硬碟的商家 goHardDrive 退貨了一項產品。在退貨過程中,我發現他們意外地公開了數千名顧客的詳細資料,包括全名、通訊地址、電子郵件地址以及訂單詳情。
外洩事件
當我向 goHardDrive 申請退貨時,他們指派給我一組末五碼為數字的退貨授權(RMA)編號。我不會公開我實際的 RMA 編號,但你可以想像它類似這樣:
GHD12345
為了查詢退貨進度,我在 ghdwebapps.com/rma 的表單中輸入了我的 RMA 編號:

goHardDrive 的 RMA 狀態查詢表單。沒錯,它寫著「Enter email」,但實際上是要輸入 RMA 編號。
當我輸入 RMA 編號後,出現了這個畫面:

這個畫面顯示了 goHardDrive 所掌握關於我的所有私人資訊,包括:
- 我的姓名
- 我的通訊地址
- 我的電子郵件地址
- 我的電話號碼(幸好我沒有提供)
- 我的訂單編號與日期
- 我退貨的產品以及退貨原因
我一開始並未察覺 goHardDrive 暴露了多少資訊,直到我不小心打錯了 RMA 編號的最後一位數字,表單竟顯示了另一位在同一天辦理退貨的顧客的完整資料。
這個頁面的網址格式如下:
https://ghdwebapps.com/rma/check?rmaNo=GHD12345&fromButton=1要撰寫一個指令碼來發送 HTTP GET 請求,將 12345 替換為從 00001 到 99999 的每一個數字,並擷取所有曾申請退貨的 goHardDrive 顧客的個資,是輕而易舉的事。即使是完全不懂軟體開發的人,也只要在表單中輸入任意 RMA 編號,就能取得該顧客的所有資料。
這個表單是公開的,且沒有任何身分驗證、速率限制或 CAPTCHA。
外洩規模
我估計這次外洩影響了約 1 萬至 10 萬名顧客。
我無法確切得知有多少 goHardDrive 顧客受到此漏洞影響,但假設 goHardDrive 的 RMA 編號是從 10000 或更小的數字開始並依序遞增,那麼代表有 1 萬至 10 萬名顧客的資料在此次外洩中遭到暴露。
goHardDrive 嘗試的修補措施
我在 2025 年 5 月 21 日就此問題寫信給 goHardDrive。值得肯定的是,他們在兩小時內就回覆確認了問題,並表示會在三到五個工作天內部署修補程式。
一週後,我仍未收到任何消息,於是再次聯繫 goHardDrive。他們表示已更新表單,以防止攻擊者列舉 RMA 編號。
我查看了他們的 RMA 表單,發現他們已改為要求顧客輸入郵遞區號和門牌號碼。

起初,這看起來似乎足夠了。雖然給定一組連續的 RMA 編號,要猜出其他所有有效的 RMA 編號輕而易舉,但要同時猜中 RMA 編號以及對應的郵遞區號和門牌號碼,機率有多大呢?
然後,我再仔細想了一下。美國的 ZIP codes 只有五位數,也就是說最多只有 10 萬種可能的 ZIP codes。實際上還不到一半,因為只有約 4.2 萬個有效的 ZIP codes。而且 ZIP codes 並非平均分布,所以某些 ZIP codes遠比其他的更常見。
門牌號碼的可能範圍很廣,但大多數很可能落在 1 到 100 之間,而且可能高度集中在較小的數字。
因此,最糟的情況是,攻擊者必須嘗試約 42k x 100 = 4.2M 種可能的組合,才能洩漏與某個 RMA 編號相關的詳細資料。若以常見的 ZIP codes 和門牌號碼來優化,攻擊者在嘗試約 5 萬次後,成功的機率可能就超過 50%。
要對一個 Web API 進行 5 萬次猜測需要多久?資安研究員 brutecat 最近撰文探討在 Google Web API 上列舉電話號碼的手法。他們在一台每小時 0.30 美元的雲端伺服器上,能夠達到每秒 4 萬次 HTTP 請求。我懷疑 goHardDrive 的 RMA 表單能否處理每秒 4 萬次請求,但如果攻擊者能以每秒測試 1 千種可能性的速度進行,我也不會感到意外,這意味著他們大約在一分鐘內就有 50% 的機率猜中。
goHardDrive 完全移除 RMA 狀態查詢功能
我再次聯繫 goHardDrive,告訴他們我認為新的緩解措施仍不足夠。
我建議 goHardDrive 簡化其 RMA 狀態頁面,僅公布 RMA 狀態,而非一股腦地公開我所有的個資。身為顧客,我在查詢 RMA 狀態時,不需要看到自己的地址、電子郵件和電話號碼。我只想知道 goHardDrive 何時收到我的退貨,以及何時寄出替換品。實在沒有必要公布我所有的私人資料,雖然我猜這可能是為了配合 goHardDrive 內部的某個流程。
goHardDrive 沒有回覆,因此我一週後再次追問,詢問他們是否認為這是個問題。他們在幾小時後回覆,表示會將 RMA 狀態查詢功能從網站上完全移除。
下一週,我再次查看,發現他們確實已將 RMA 狀態頁面下架。我詢問取得 RMA 狀態的新流程是什麼,goHardDrive 表示顧客可以直接寫信向他們詢問進度更新。
漏洞獎勵
我詢問 goHardDrive 是否有針對協調揭露安全漏洞的人提供 bug bounty(漏洞獎勵)。goHardDrive 表示他們沒有漏洞獎勵計畫,但已從我 330 美元的購買金額中退還 20 美元以表謝意。
這種規模的資訊洩露,其獎金通常為數百至數千美元,所以 20 美元算是相當低的。
時序
- 2025-05-21:我向 goHardDrive 通報此漏洞。
- 2025-05-21:(兩小時後)goHardDrive 確認收到問題,並表示正在著手修復,預計在 3 至 5 個工作天內完成修補。
- 2025-05-29:我向 goHardDrive 詢問處理進度。
- 2025-05-29:goHardDrive 回覆表示已透過要求顧客輸入與 RMA 相符的郵遞區號和街道門牌號碼來修復此問題。
- 2025-06-05:我向 goHardDrive 表達對其新版 RMA 查詢功能的疑慮。
- 2025-06-20:goHardDrive 向我確認,他們已永久移除 RMA 查詢表單,今後僅透過電子郵件提供 RMA 狀態。
題外話:姑且不論外洩,這退貨流程也糟透了
即使沒有洩漏我所有的資料,goHardDrive 的 RMA 流程也是我遇過所有商家中最糟糕的。
我當初之所以選擇 goHardDrive,是因為在 reddit 上看到對這家公司的好評如潮。有一位使用者興奮地表示,當他向 goHardDrive 回報收到不良品硬碟時,廠商甚至在還沒收到退貨前就先寄出了替換品,並提供一張郵資已付的標籤讓顧客寄回瑕疵品:

在我的案例中,我向 goHardDrive 購買的三顆硬碟中有兩顆到貨時就是壞的。我浪費了許多時間試圖診斷伺服器上的硬體問題,因為我以為兩顆不同的硬碟同時到貨就壞掉的機率極低,但最終我才意識到,goHardDrive 就是直接寄了兩顆壞掉的硬碟給我。
我開始辦理退貨時,驚訝地發現 goHardDrive 竟然要我重新輸入所有訂單和地址資料。

goHardDrive 的 RMA 表單要求顧客手動重新輸入所有地址和訂單資料。
通常,RMA 流程只需讓你輸入訂單編號,商家就會帶出你的資料,你只需告知需要退回哪個品項即可。但在 goHardDrive 的流程中,感覺就像他們在短短兩週內就完全忘了我是誰。
此外,與 reddit 上的說法相反,goHardDrive 並不負擔退貨運費。即使他們寄給我的是故障的硬體,我仍得自掏腰包支付郵資。結果,我沒有在回報瑕疵後兩天內就拿到替換品,而是等了兩週。
最後,在整個退貨過程中,goHardDrive 從未寄送任何電子郵件確認或進度更新。幸好我有想到在寄出退貨包裹前先拍照存證,否則我根本不會有任何 RMA 編號的紀錄。透過查看那個不安全的 RMA 狀態頁面,我可以看到我的申請從 OPEN 變為 RECEIVED 再到 CLOSED,期間沒有任何進一步的資訊或物流追蹤號碼。
隨機一篇部落格