导语:从TENX用户窃取资金
我能够绕过TenX登录系统的次数限制,这使得我可以在30分钟内接管每个TenX账户(了解受害者的电子邮件地址后)。接管帐户后,由于缺少验证功能,TenX允许攻击者更改电子邮件地址(本文编写时仍然如此)以及帐户的绑定电话号码(通过Web应用程序)。此外,如果账户缺少额外的验证步骤,攻击者可以转出受影响账户的所有资金。
TenX是什么?
TenX是一家总部位于新加坡的公司,提供加密借记卡和加密货币钱包。在2017年,他们进行了当时最大的ICO,获得了超过8千万美元。
TenX鼓励安全研究人员使用可以负责任披露相关内容的漏洞奖励计划提交漏洞。
任意用户密码重置漏洞
在2017年11月底,我发现了他们的网站并注册了他们的服务。他们要求用户提供电子邮件地址和电话号码。我很惊讶,在注册时不需要设置密码 – 他们只通过一个随机码提供认证。
注意:TenX现在支持用户自定义的密码!
验证码通过短信或电子邮件发送给用户。随机验证码是一个6位数字,似乎有效期为30分钟。
下面的屏幕截图显示了通过电子邮件发送验证码的示例:
以下屏幕截图显示了用于检查在网页上是否输入了正确验证码的API请求:
以下屏幕截图显示了对上述请求的响应:
下面的屏幕截图是通过提交验证码测试,我们发现在提交第7次之后,服务器会停止响应, 那么也就意味着有限制。
我尝试的第一件事是更改我的源IP地址。我使用了VPN连接并重新提交了上面的请求。我惊讶的发现请求已经过去了,而且“X-RateLimit-Remaining”响应头被重新设置为6.
那么,我可以通过改变源IP来绕过次数限制保护。
我继续进行测试,并开始尝试不同的请求头。“X-Forwarded-For”通常用于标识通过负载平衡器或代理连接到Web服务器的用户的始发IP地址。经过测试,我发现,TenX实际上解释了“X-Forwarded-For”是可以利用的。
这意味着我能够通过仅使用一个源IP绕过TenX的速率限制保护。
我创建了一个公共源IP列表,并将它们提供给Burp Intruder。
我们假设,我们能够在30分钟内尝试500000次后找到正确的随机密码。500000 / 30/60 = 280。这意味着如果我们每秒能够测试280个组合,大约30分钟就能找到正确的随机密码。但是我家网络并不是很好,所以我每秒只能处理大约70-100个请求。
保持被暴力破解账户的控制权
TenX用户登录帐户后,可以更改电子邮件地址以及电话号码(需通过TenX的Web应用程序)。在这一点上,我原本想去构建虚假的验证,比如给老地址发送确认电子邮件。不过,并没有这样的事情……
确认电子邮箱地址的邮件只发送到新地址,而不是旧邮箱。更改电话号码时也会发生同样的情况。
这使得攻击者可以将受害者完全锁定在他/她的账户之外,并在接管账户后维持对其的控制。
窃取BTC和ETH
攻击者可以完全控制受害者帐户。即使受害者注意到他/她的帐户遭到黑客入侵,也需要数小时才能联系到TenX的支持人员。那么,受害者的资金呢?即使在将BTC发送到另一个钱包地址之前,需要验证邮件地址,这也不是问题,因为电子邮件地址已经更改为攻击者控制的那个了。
我提交了三种不同的漏洞:
·远程帐户接管漏洞 ·更改电子邮件地址和/或电话号码时缺少验证 ·撤资时没有额外的安全机制
据我所知,最后2个漏洞在撰写本文时仍未修补。TenX将这三个漏洞合并为一个问题,将漏洞奖励及时付给我了,并告诉我可以发布一篇相关文章。
建议
我认为我应该为修补这些漏洞提供很明确的建议:
·永远不要相信X-Forwarded-For 头部字段。
·当涉及到限制次数时,不要过于依赖源IP – 使用其他类似用户认证的东西!
·在更改安全关键信息(如电子邮件地址和电话号码)时添加其他验证方法。
当用户更改电子邮件或电话号码时,用户必须证明他/她可以访问此电子邮件/电话(这里指曾使用的)。这可以通过向旧电话号码/旧电子邮件地址发送确认链接或PIN来完成。
TenX至少应该通过旧的电子邮件地址通知用户,这些账户信息已被更改。
·退币时增加额外的验证技巧。
结论
我非常欣赏TenX所做的事情,我认为他们可以彻底改变BTC和其他数字货币在我们日常生活中的使用方式。
但是对于TenX等,通过与BTC,ETH和其他加密货币工作的公司而言,安全性尤其重要。
在BTC被盗期间,受害者无法撤回BTC交易,这就是安全需要高度重视的原因,特别是在像TenX这样的大公司中。
TenX应尽快解决余下的问题。不过,我还是要感谢他们优秀的配合,与他们的漏洞赏金/安全团队的沟通很舒适,当然还有漏洞奖励。
时间线
2017年11月26日 -通过电子邮件向TENX报告3个漏洞
2017年11月30日 -被TENX询问漏洞详情
2017年12月11日 -漏洞已确认,TENX通过BTC支付$3000
2018年01月23日 -部分漏洞修复,他们已修补X-Forwarded-For的问题,TenX允许我发布了这篇文章