goHardDrive Leaked Personal Data for Thousands of Customers

Michael Lynch

goHardDrive 外洩數千名客戶的個人資料

原文由 Michael Lynch 發布,訂閱此部落格

我最近向專門販售二手硬碟的商家 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 編號加上對應的郵遞區號和門牌號碼,機率應該很低吧?

但我再仔細想想,美國的郵遞區號只有五位數,也就是說最多只有 10 萬種組合。實際上還不到一半,因為有效的郵遞區號只有 約 4.2 萬個有效郵遞區號。而且郵遞區號並非平均分布,所以某些郵遞區號遠比其他的更常見。

門牌號碼的範圍雖然很大,但大多數很可能落在 1 到 100 之間,而且很可能高度集中在較小的數字。

所以,最壞的情況下,攻擊者只要嘗試約 42k x 100 = 4.2M 種組合,就能洩漏某個 RMA 編號所關聯的詳細資料。如果針對常見的郵遞區號和門牌號碼進行最佳化,攻擊者大概只要猜測約 5 萬次,就有超過 50% 的機率成功。

對一個網站 API 猜測 5 萬次需要多久?資安研究員 brutecat 最近曾撰文描述如何在 Google 的網頁 API 上枚舉電話號碼。他們在一台每小時 0.30 美元的雲端主機上,能夠達到每秒 4 萬次 HTTP 請求的速度。我不認為 goHardDrive 的 RMA 表單能夠承受每秒 4 萬次請求,但攻擊者要達到每秒測試 1 千種組合應該不難,這意味著大約一分鐘內就有 50% 的機率猜中。

goHardDrive 徹底移除 RMA 查詢功能

我再次聯繫 goHardDrive,告訴他們我認為新的緩解措施仍然不足。

我建議 goHardDrive 簡化 RMA 狀態頁面,只顯示 RMA 的處理進度,而不是一股腦把我所有的個人資料都攤出來。身為客戶,我在查詢 RMA 狀態時,根本不需要看到自己的地址、電子郵件和電話號碼。我只想知道 goHardDrive 什麼時候收到我的退貨、什麼時候寄出替換品。根本沒必要公開我所有的隱私資料,雖然我猜這可能是為了方便他們內部作業。

goHardDrive 沒有回覆,所以一週後我又追問他們是否認為這仍是個問題。幾小時後他們回覆說,會直接從網站上移除 RMA 狀態查詢功能。

隔週我再去查看,發現他們確實已經下架了 RMA 狀態頁面。我詢問新的 RMA 查詢流程是什麼,goHardDrive 表示客戶現在可以直接透過電子郵件詢問處理進度。

漏洞獎金

我詢問 goHardDrive 是否有針對協調揭露資安漏洞的人提供漏洞獎金。goHardDrive 表示他們沒有漏洞獎金計畫,但為了表示感謝,從我 330 美元的訂單中退了 20 美元給我。

這種規模的資訊外洩,漏洞獎金通常是數百到數千美元,所以 20 美元實在偏低。

時序

  • 2025-05-21:我向 goHardDrive 通報漏洞。
  • 2025-05-21:(兩小時後)goHardDrive 確認收到通報,並表示正在修補,預計三到五個工作天內完成。
  • 2025-05-29:我向 goHardDrive 詢問處理進度。
  • 2025-05-29:goHardDrive 回覆表示已透過要求客戶輸入相符的郵遞區號和門牌號碼來修補問題。
  • 2025-06-05:我向 goHardDrive 表達對新版 RMA 查詢功能的疑慮。
  • 2025-06-20:goHardDrive 向我確認已永久移除 RMA 查詢表單,未來僅透過電子郵件提供 RMA 狀態。

題外話:先不談外洩,這退貨流程本身就很糟

就算沒有洩漏我的資料,goHardDrive 的 RMA 流程也是我遇過所有商家中最糟的。

我當初會選擇 goHardDrive,是因為在 reddit 上看到對這家公司的好評。有一位使用者興奮地分享,當他向 goHardDrive 回報硬碟故障時,廠商甚至在還沒收到退貨前就先寄出了替換品,還提供了一張免郵資的退貨標籤讓他方便寄回瑕疵品:

我剛跟他們買了一顆 24TB 的 Seagate Exos。昨天安裝後發現是到貨即故障(馬達只發出嗶嗶聲,毫無其他反應)。早上 6:30 寫信給他們,當天下午就回覆,而且在當天結束前就已經用兩日寄送(費用由他們負擔)把替換品寄出。還給了我一張預付郵資的標籤,讓我『方便時』再把瑕疵品寄回。當然如果一開始就正常運作會更好,但他們處理得非常完美。替換品應該明天就會到,希望能正常運作。

以我的情況來說,我在 goHardDrive 買的三顆硬碟中,有兩顆到貨就是壞的。我花了很多時間在伺服器上排查硬體問題,因為我覺得兩顆硬碟同時到貨就壞掉的機率實在太低,但最後才發現,goHardDrive 就是直接寄了兩顆壞掉的硬碟給我。

我開始辦理退貨時,驚訝地發現 goHardDrive 竟然要我重新輸入所有的訂單和地址資料。

goHardDrive 的 RMA 表單要求客戶手動重新輸入所有地址和訂單資料。

一般來說,RMA 流程只要讓你輸入訂單編號,商家就會帶出你的資料,你只要告知要退哪個品項即可。但在 goHardDrive 的流程中,感覺就像他們在我購買後短短兩週內,就完全忘了我是誰。

而且,與 reddit 上的說法相反,goHardDrive 並不負擔退貨運費。即使是他們寄來故障的硬體,我還是得自費支付郵資。而且不像有人在兩天內就拿到替換品,我等了整整兩週。

最後,goHardDrive 在整個退貨過程中完全沒有寄送任何電子郵件確認或進度更新。還好我有先拍下退貨包裹的照片,否則我根本不會有任何 RMA 編號的紀錄。透過那個不安全的 RMA 狀態頁面,我只能看到我的申請從 OPEN 變成 RECEIVED 再變成 CLOSED,沒有任何其他資訊或物流追蹤號碼。

本文章由 muse-spark-1.2-contributor 進行翻譯

留言