密码重置提供可能的有效电子邮件地址的线索

信息安全 重设密码 用户枚举
2021-08-28 00:48:37

我们有一个系统,如果您忘记密码并想重设密码,请转到忘记密码页面并输入您的电子邮件地址。一个临时链接将发送到您的电子邮件以重置您的密码。

现在,当我们对我们的应用程序进行渗透测试时,发现了一个问题:

尝试重置密码时,应用程序会提供可能有效电子邮件地址的线索。通过简单地猜测可能的电子邮件地址并能够通过错误消息找到有效的电子邮件地址,可以滥用此功能。

好吧,只有一个字段,当然很明显,如果重置密码尝试失败,那是由于电子邮件无效。似乎这个渗透测试是错误的。除了为密码重置添加一个额外的字段(除了电子邮件)之外,还有什么解决方案可以解决这个问题?

4个回答

不要表示尝试“失败”。一个用户(合法或其他),要求一个密码重置链接,并给你一个电子邮件地址。你应该在这里说的都是

您的提交已收到。如果我们有与您的电子邮件地址匹配的帐户,您将收到一封电子邮件,其中包含重置密码的链接。

用户仍然会获得链接(成功),但攻击者不会知道提供的电子邮件地址是否与帐户相关联。

这一发现的原因是用户收到不同的响应,具体取决于电子邮件地址的存在。这可以简单到告诉他们地址未知,或者在响应中更微妙的东西。

避免此类问题的最简单实现是返回完全相同的响应,无论电子邮件地址是否存在。一个简单的

重置密码的信息已发送到提供的电子邮件地址。如果您没有收到电子邮件,请检查您是否提供了正确的地址。

会成功的。

如果您知道电子邮件地址,请发送密码重置信息。如果它不存在,不要做任何事情。真实用户将获得链接,而攻击者无法确定是否发送了电子邮件。

作为上述答案的补充(更适合作为评论,但还不能这样做),黑客可以采取的另一个步骤是测量您对表单的回复的时间。确定电子邮件不存在可能需要 10 毫秒,而生成重置链接并发送电子邮件需要 100 毫秒。黑客可以知道响应是否较慢,即成功查找。在未找到电子邮件的情况下,您可以使用随机睡眠计时器,以便两个响应花费相同的时间。

我们在保护什么?

首先,人们应该问他们到底要保护什么。在这种情况下,有两种不同的威胁:

  • 威胁 1攻击者暴力破解随机电子邮件以查找有效的注册电子邮件。这在理论上可以用来创建垃圾邮件列表,但据我所知,从来没有做过,因为发送电子邮件比经历额外的麻烦更简单(我收到垃圾邮件的次数声称我的 [一些美国银行] 帐户需要采取行动,尽管不住在美国是不计其数)。
  • 威胁 2攻击者针对特定用户或特定用户列表。当某人在某处注册的事实可能会产生后果时,这一点尤其重要。示例:在 Grindr 或 Ashley Madison 上拥有帐户的行为本身在某些社区可能是危险的。

更大的图景

下一个要考虑的问题是其他地方可能会暴露相同的信息并将其作为一个整体来考虑。通常,注册表会通知用户输入的电子邮件是否已经注册,但这当然不适用于大多数 B2B 软件。除了“与用户共享”功能(可以输入电子邮件以与该用户共享某些对象的输入框)之外,通常还会公开此信息,但由于这些信息很少见,我不会在此答案中包含这些信息。

公开注册系统的解决方案

首先,从用户体验的角度来看,在注册过程中不通知用户帐户已经存在是一件好事。这同样适用于密码重置表单,当用户输入错误或有多封电子邮件时,密码重置表单会静默失败1 。这并不意味着这是不应该做的事情,而是应该权衡安全风险和收益。

给定一个公开注册的系统,要考虑的重要一点是威胁 2对您产品的用户有多大。考虑到即使是适度的风险,也可以谨慎地将注册表单更改为仅输入姓名和电子邮件,给出“检查您的电子邮件以继续注册”的消息,如果电子邮件已经注册,则向用户发送电子邮件通知他们这个。同样,在这种情况下,密码重置表单不会以任何方式通知用户电子邮件是否有效。

另一方面,如果Threat 2最小,我们必须专门针对Threat 1建模当然,之前的方法也可以完美地对抗威胁 1,但考虑到 UX 成本,值得考虑其他解决方案。最明显的解决方案是“电子邮件存在检查”和“忘记密码”检查的速率限制2(从技术上讲,这些调用甚至可以转到同一个 API 端点)。这些通常被设计为对前 10 次左右的调用相当宽松,但在那之后很快就会变得非常有限。

重要提示:切勿在未对注册表单实施类似限制的情况下从密码注册中删除错误消息。

未公开注册系统的解决方案

这一切都归结为与上述相同的问题(我应该先写这个),但是如果没有点击注册用户体验的“额外”成本,拥有一个安全的密码忘记表单相对“便宜”,虽然当然这对用户来说仍然令人不快,您仍然可以考虑速率限制是否不足以满足您的特定威胁模型。

笔记

1:与其默默地失败,不如至少向输入的电子邮件发送一封电子邮件,通知他们找不到他们的电子邮件。这 1) 阻止了攻击者大规模滥用系统(因为它会被注意到)和 2) 防止用户想知道为什么他们没有收到电子邮件。

2:请注意,速率限制会对大型网络或 VPN 的用户产生负面影响。始终考虑受众对您的重要性,并在此基础上花费足够的时间来确保应用程序即使在速率限制最苛刻的情况下也能保持正常运行(例如,通过解决验证码来降低速率限制或将最大速率限制设置为大约每分钟一次,并确保应用程序将等待整整一分钟(注意:考虑到一组用户在同一次会议开始时注册相同的服务,这仍然会令人不快)。