用户名枚举漏洞可让攻击者识别有效用户,这是许多攻击的第一步。在最近的一次渗透测试中,我们在 AWS Web 控制台中发现了两个用户名枚举漏洞。这些漏洞很有趣,因为它们位于共享责任模型的 AWS 端。我们的大部分测试和研究都集中在模型的客户端或“云中的安全性”上。
我们将在此详细介绍的两个用户名枚举发现,它们是由 Amazon 凭证验证软件中的错误导致的,并使所有启用控制台的 IAM 用户面临用户名枚举的风险。
由于每个 AWS 客户都受到这些风险的影响,AWS 与 Rhino 密切合作,及时解决这些问题。
注意:虽然本文介绍了与用户名枚举相关的 2 个发现,但只有一个有 CVE(发现 2),并被 AWS 确认为安全漏洞。 亚马逊指出,发现 1 是“可接受的风险”。
发现 1 - 用户名枚举(具有 MFA 的用户)
当为 IAM 用户帐户启用 MFA 时,登录流程会泄露用户的存在。下面的流程图显示了登录流程的用户体验。提交凭证后,会出现一个分叉,在 UI 中产生两个完全不同的应用程序状态。这不需要任何特殊工具来检测。
如果用户存在(无论密码是否正确),下一页都会请求 MFA 代码(顶部图片),确认 AWS 中的 IAM 用户。
否则,应用程序将显示用户不存在的错误消息(下图)。
虽然这种情况在 Web 应用程序中并不罕见,但在主要的云提供商之一中发现这种情况却令人惊讶。
发现 2 (CVE-2025-0693) - 通过定时攻击进行用户名枚举(无 MFA)
发现 1 依赖于目标 IAM 用户是否启用了 MFA,这是一项可选的安全功能 – 并非所有用户都使用 MFA。对于那些没有启用 MFA 的用户,登录流程略有不同,并且不包含明显的枚举缺陷。
然而,当使用 Web 代理(Burp Suite)仔细查看流量时,我们注意到一个有趣的行为,我们可以利用它来枚举用户。此案例的登录流程如下图所示 -
当单因素 (非 MFA) 用户提交凭证时,可能出现两种响应:“错误”和“已登录”。模拟攻击者,我们还没有用户的密码,所以让我们看看导致错误的路径。
通常,登录流程必须验证用户名和密码。如果用户存在,则检查密码。此检查需要时间,可能会导致服务器响应速度变慢。如果时间差异可测量,则可用于用户名枚举。
为了检查时间差异,我们在 AWS 账户中创建了一个测试 IAM 用户,用户名为“bfme-console”。该用户被授予控制台访问权限,并且禁用了 MFA。然后,我们使用了 Burp Suite 的 Intruder,没有并发(资源池 > 最大并发请求“1”)。下面是 Intruder 结果的图像。屏幕截图中的列是:
-
请求:请求的索引。按此列排序将按时间顺序组织列表。
-
Payload :请求中使用的有效负载。在本例中,有效负载是用户名。
-
状态代码:从服务器收到的 HTTP 状态代码。
-
收到的响应:服务器响应所用的毫秒数。这是这里的关键列,因为它最接近地表示了服务器响应所用的时间。
按时间顺序查看结果,我们发现已知测试用户的响应时间增加了约 100 毫秒。时间差异太小,人类无法注意到,但通过测量精确的响应时间,我们可以推断出给定用户所采用的逻辑路径。
防止身份验证计时攻击
防止此类枚举攻击的关键是确保服务器在用户名有效或无效时的行为相同。时间差异的可能原因是所谓的“快速退出”——代码中的逻辑捷径,通常是为了提高效率而采用的。OWASP身份验证备忘单很好地描述了这一点,并提供了易受攻击和身份验证失败的安全实现的伪代码比较。
下面的第一个代码块是不安全的,包含与此处披露的错误类似的错误。请注意,如果用户不存在,代码将跳转到 ELSE 块,显示错误,处理(和时间)要少得多。
IF USER_EXISTS(username) THEN
password_hash=HASH(password)
IS_VALID=LOOKUP_CREDENTIALS_IN_STORE(username, password_hash)
IF NOT IS_VALID THEN
RETURN Error("Invalid Username or Password!")
ENDIF
ELSE
RETURN Error("Invalid Username or Password!")
ENDIF
下一个代码块(也来自身份验证备忘单)向我们展示了如何通过确保两种情况花费相同的处理量,从而花费相似的时间,来避免时间差异。
password_hash=HASH(password)
IS_VALID=LOOKUP_CREDENTIALS_IN_STORE(username, password_hash)
IF NOT IS_VALID THEN
RETURN Error("Invalid Username or Password!")
ENDIF
记录/检测 CVE-2025-0693
此处披露的两种攻击都会在 CloudTrail 中生成“ ConsoleLogin ”事件,一个事件带有错误消息“在提供的帐户中未找到用户名”,另一个事件带有“身份验证失败”(当用户名有效但 mfa 或密码不正确时)。下面的屏幕截图提供了每个事件的完整 Cloudtrail 日志(左:无效的 IAM 用户名,右:有效用户名但身份验证失败)。
大量这两个 CloudTrail 事件(特别是来自一系列 IP,或在很长一段时间内)可能表明您的组织已经受到使用其中一种或两种技术进行的攻击。
结论
在这篇博文中,我们介绍了 AWS 控制台登录页面上的两个用户名枚举缺陷(包括 CVE-2025-0693)。
我们还讨论了如何修复一项发现 2 (CVE-2025-0693),但发现 1 被视为“可接受的风险”。提供了针对此问题的潜在补救措施,并特别介绍了在 CloudTrail 日志中应查找的内容。
我们要向 AWS 安全团队致以诚挚的谢意,感谢他们及时回复并与我们合作为所有 AWS 客户修复此问题。
日期 | 事件 |
2024 年 9 月 16 日 | 向 AWS 披露漏洞 |
2024 年 9 月 30 日 | AWS 承认了基于时间的漏洞(发现 2),并将发布 CVE |
2025 年 1 月 23 日 | 发现 2 发布了 CVE-2025-0693 |
2025 年 1 月 23 日 | AWS 修补了 CVE-2025-0693 |
2025 年 1 月 30 日 | AWS 确认他们已意识到发现 1(使用 MFA 枚举用户用户名),并接受该风险。 未发布 CVE。 |
原文始发于微信公众号(Ots安全):CVE-2025-0693:AWS IAM 用户枚举
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论