goHardDriveが数千人分の顧客の個人情報を漏洩
原文は Michael Lynch により に公開されました。 このブログを購読する
私は最近、中古ハードドライブの販売を専門とする業者であるgoHardDriveに商品を返品しました。返品手続きの過程で、同社が数千人もの顧客の氏名、住所、メールアドレス、注文内容などの詳細を誤って公開していることに気づきました。
漏洩の内容
goHardDriveに返品を申請したところ、末尾が5桁の数字である返品受付番号(RMA番号)が割り当てられました。実際のRMA番号は公開しませんが、例えば次のような番号だったと想像してください:
GHD12345
返品の状況を確認するため、ghdwebapps.com/rmaにあるフォームにRMA番号を入力しました:

goHardDriveのRMAステータス確認フォーム。「Enter email」と表示されているが、実際にはRMA番号の入力を求められる。
RMA番号を入力すると、次のような画面が表示されました:

その画面には、goHardDriveが把握している私に関するあらゆる個人情報が表示されていました。具体的には以下の通りです:
- 私の氏名
- 私の住所
- 私のメールアドレス
- 私の電話番号(幸い私は登録していませんでした)
- 注文番号と注文日
- 返品する商品とその返品理由
goHardDriveがどれだけの情報を晒しているかに気づいたのは、RMA番号の最後の桁を誤って入力してしまったときでした。するとフォームには、同じ日に商品を返品した別の顧客の情報がすべて表示されたのです。
このページのURLは次のような形式でした:
https://ghdwebapps.com/rma/check?rmaNo=GHD12345&fromButton=112345の部分を00001から99999までの数字に置き換えてHTTP GETリクエストを送り、返品を申請したすべてのgoHardDrive顧客の個人情報を収集するスクリプトを書くのは極めて簡単です。ソフトウェア開発の知識がない人でも、フォームに適当なRMA番号を入力するだけで、その顧客のすべてのデータを取得できてしまいます。
このフォームは公開されており、認証やレート制限、CAPTCHAは一切ありませんでした。
漏洩の規模
この漏洩の影響を受けた顧客は1万人から10万人に上ると推定しています。
この脆弱性が何人のgoHardDrive顧客に影響したかを正確に断定することはできませんが、goHardDriveがRMA番号を10000以下から開始し、1ずつ増加させていると仮定すると、この漏洩で1万人から10万人の顧客情報が晒されたことになります。
goHardDriveによる修正の試み
私は2025年5月21日にこの問題についてgoHardDriveにメールで連絡しました。評価すべきことに、2時間以内に返信があり、問題を認識し、3〜5営業日以内に修正を展開するとのことでした。
1週間経っても連絡がなかったため、こちらから再度問い合わせました。すると、攻撃者がRMA番号を総当たりできないようにフォームを更新したとの回答がありました。
RMAフォームを確認したところ、顧客に郵便番号と番地の入力を求めるように変更されていました。

一見すると、これで十分な対策に思えました。RMA番号は連番なので、他の有効なRMA番号を推測するのは簡単ですが、RMA番号に加えて対応するZIPコードと番地まで推測できる確率はどれくらいあるでしょうか?
しかし、よく考えてみると、米国のZIPコードは5桁しかないため、考えられる組み合わせは10万通りしかありません。実際には有効なZIPコードは約4万2000件しかないため、その半分以下です。しかもZIPコードは均等に分布しておらず、特定のZIPコードははるかに多く使われています。
番地は取りうる範囲が広いものの、その大半は1から100の間におさまると考えられ、特に小さい数字に集中している可能性が高いです。
つまり最悪の場合でも、攻撃者がRMA番号に紐づく情報を漏洩させるために試す必要がある組み合わせは、約4万2000×100=420万通りです。よく使われるZIPコードや番地から優先的に試せば、約5万回の試行で50%以上の確率で成功すると考えられます。
Web APIに対して5万回の推測を行うのにどれくらい時間がかかるでしょうか。セキュリティ研究者のbrutecat氏は最近、GoogleのWeb APIで電話番号を列挙する手法について書いています。同氏によれば、1時間あたり0.30ドルのクラウドサーバーで1秒あたり4万件のHTTPリクエストを送信できたとのことです。goHardDriveのRMAフォームが1秒あたり4万件のリクエストを処理できるとは思いませんが、攻撃者が1秒あたり1000通りを試すことは十分可能でしょう。つまり、約1分以内に50%の確率で正解を推測できてしまうことになります。
goHardDrive、RMAステータス確認機能を完全に削除
私はgoHardDriveに連絡を取り、新しい対策では不十分だと考えていることを伝えました。
RMAステータスページを簡素化し、私の個人情報をすべて晒すのではなく、RMAの状況だけを表示するように提案しました。顧客としては、RMAの状況を確認する際に自分の住所やメールアドレス、電話番号を見る必要はありません。知りたいのは、goHardDriveがいつ返品を受け付け、いつ交換品を発送したかだけです。すべての個人情報を公開する必要はないはずですが、おそらくgoHardDrive側の内部的なプロセスのためにそうなっているのでしょう。
goHardDriveから返信がなかったため、1週間後にこれを問題と認識しているか再度問い合わせました。すると数時間後に、ウェブサイトからRMAステータス確認機能自体を完全に削除するとの返答がありました。
翌週に確認したところ、確かにRMAステータスページは削除されていました。新しいRMA状況の確認方法を尋ねたところ、goHardDriveからは、顧客はメールで状況を問い合わせればよいとの回答がありました。
バグバウンティ
goHardDriveに、セキュリティ脆弱性の協調的開示に対してバグバウンティを提供しているか尋ねました。goHardDriveからは、バグバウンティプログラムは設けていないが、感謝の印として330ドルの購入代金のうち20ドルを返金するとの回答がありました。
この規模の情報漏洩に対する報奨金は通常数百から数千ドルが相場なので、20ドルはかなり低い金額です。
タイムライン
- 2025-05-21: goHardDriveに脆弱性を報告。
- 2025-05-21: (2時間後)goHardDriveが問題を認識し、修正に取り組んでいること、3〜5営業日以内に修正される見込みであることを回答。
- 2025-05-29: goHardDriveに状況の更新を依頼。
- 2025-05-29: goHardDriveから、RMAに対応するZIPコードと番地の入力を求めるようにして問題を修正したとの回答。
- 2025-06-05: 新しいRMA検索機能について懸念を伝える。
- 2025-06-20: goHardDriveがRMA検索フォームを恒久的に削除し、今後はメールでのみRMAステータスを共有することを確認。
余談:漏洩を別にしても、この返品プロセスはひどい
仮に私のデータが漏洩していなかったとしても、goHardDriveのRMAプロセスは私がこれまで利用したどの業者よりもひどいものでした。
私がgoHardDriveを選んだのは、redditで同社が高く評価されていたからでした。あるユーザーは、不良ドライブを報告したところ、返品を受け取る前に交換品が送られてきて、さらに不良品返送用の料金支払い済みラベルまで提供されたと絶賛していました:

私の場合、goHardDriveから購入した3台のハードドライブのうち2台が到着時から故障していました。2台が同時に故障して届くとは考えにくかったため、サーバーのハードウェアの問題を診断しようと多くの時間を無駄にしましたが、最終的にgoHardDriveが単に故障したドライブを2台送ってきたのだと気づきました。
返品手続きを始めたところ、goHardDriveが注文情報や住所の詳細をすべて再入力させたことに驚きました。

goHardDriveのRMAフォームでは、顧客が住所や注文の詳細をすべて手動で再入力しなければならない。
通常、RMAの手続きでは注文番号を入力すれば業者が顧客情報を呼び出し、どの商品を返品したいかを伝えるだけで済みます。goHardDriveの場合は、購入から2週間しか経っていないのに、完全に顧客のことを忘れ去られたかのようでした。
また、redditでの主張とは異なり、goHardDriveは返送料を負担しません。goHardDrive側が故障したハードウェアを送ってきたにもかかわらず、私は自費で送料を支払わなければなりませんでした。不具合を報告してから2日後に交換品が手元に届くのではなく、2週間も待たなければなりませんでした。
最後に、goHardDriveは返品プロセス全体を通じて確認メールや進捗の連絡を一切送ってきませんでした。発送前に返品パッケージの写真を撮っておいて本当に良かったと思います。そうしなければ、RMA番号の記録すら残らなかったからです。安全でないRMAステータスページで確認したところ、私のリクエストはOPENからRECEIVED、そしてCLOSEDへと変わりましたが、それ以上の情報や追跡番号はありませんでした。
記事をランダムに読む
コメント
ログインしてコメントする