goHardDrive 泄露数千名客户的个人数据
原文由 Michael Lynch 于 发布,订阅该博客
我最近向专门销售二手硬盘的商家 goHardDrive 退了一件商品。在退货过程中,我发现他们意外地公开了数千名客户的详细信息,包括全名、邮寄地址、电子邮件地址和订单详情。
泄露详情
当我向 goHardDrive 申请退货时,他们给了我一个以五位数字结尾的退货授权(RMA)编号。出于隐私考虑,我不打算公开真实的 RMA 编号,但可以假设它是这样的:
GHD12345
要查询退货进度,我在 ghdwebapps.com/rma 上的一个表单中输入了我的 RMA 编号:

goHardDrive 的 RMA 状态查询表单。没错,表单上写着“Enter email”,但实际上要填的是 RMA 编号。
输入 RMA 编号后,我看到了这个页面:

这个页面显示了 goHardDrive 所掌握的关于我的全部隐私信息,包括:
- 我的姓名
- 我的邮寄地址
- 我的电子邮件地址
- 我的电话号码(幸好我没有提供)
- 我的订单号和下单日期
- 我退货的产品及退货原因
直到我不小心输错了 RMA 编号的最后一位,表单显示出另一位在同一天申请退货的客户的完整信息,我才意识到 goHardDrive 暴露了多少信息。
该页面的 URL 格式如下:
https://ghdwebapps.com/rma/check?rmaNo=GHD12345&fromButton=1编写一个脚本,将 12345 替换为从 00001 到 99999 的每一个数字,发送 HTTP GET 请求,就能轻易抓取所有申请过退货的 goHardDrive 客户的个人信息。即使是完全不懂软件开发的人,也只需在表单中随意输入一个 RMA 编号,就能获取该客户的所有数据。
该表单完全公开,没有任何身份验证、速率限制或验证码保护。
泄露规模
据我估计,此次泄露影响了 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 万次请求,但攻击者每秒测试 1000 种可能性的速度,我一点也不会感到意外,这意味着他们大约在一分钟内就有 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 确认了该问题,并表示正在修复,预计在 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 给我发来了有问题的硬件,我仍不得不自掏腰包支付邮费。我并没有在报告故障两天后就拿到替换品,而是等了整整两周。
最后,在整个退货过程中,goHardDrive 从未发送过任何邮件确认或进度更新。幸好我寄出前给退货包裹拍了照,否则我连 RMA 编号的记录都不会有。通过那个不安全的 RMA 状态页面,我只能看到我的申请状态从 OPEN 变为 RECEIVED 再到 CLOSED,没有任何其他信息或物流单号。
随机一篇博客
评论
登录后参与讨论