不当认证导致的账户接管
作者:Hossam Mostafa
大家好,我是Hossam Mostafa,在漏洞挖掘社区中以Viper之名闻名。我是一名专注于Web、移动和网络应用程序的渗透测试员。本报告披露了一个严重的认证流程问题——由于首次令牌缓存刷新令牌行为导致的持久性账户接管。
快速总结
在一次授权的安全测试中,我发现应用程序在注册时发放访问令牌和刷新令牌,而不需要邮箱验证。关键问题在于,在账户创建时发放的第一个令牌被缓存在本地(攻击者控制的缓存/会话中),并且在合法用户重置密码后仍然有效。虽然后续令牌表现正常,但这第一个令牌允许持久的账户接管:保存了初始刷新令牌的攻击者可以继续获取新的访问令牌并访问受保护的端点,即使受害者更改了密码。
重要说明: 注册时发放的第一个刷新令牌存储在攻击者的缓存/会话中,并在密码重置后仍然可用,从而实现持续访问。
首个令牌细节的重要性
在实验过程中,我观察到一个操作行为:第一个发放的刷新令牌(我在注册后立即获得的令牌)是存储在我攻击方缓存/会话中的那个,并且在受害者完成密码重置后仍然有效。这不仅仅是理论上的令牌撤销遗漏——这是一个实际的、可重现的条件,使得利用变得简单:保留最初发放的令牌,账户实际上就被永久入侵,直到令牌被撤销。
攻击场景步骤
1. 创建未验证账户
|
|
观察结果:账户成功创建,无需邮箱验证。
2. 交换凭证获取令牌(密码授权)
|
|
保存访问令牌、刷新令牌(这是第一个刷新令牌)和ID令牌(显示email_verified:false)。
3. 注意存储行为
我将第一个刷新令牌本地存储(攻击者缓存/会话)。这个存储的令牌是我后来重新使用的那个。
4. 触发或等待受害者重置密码
合法用户使用"忘记密码"功能并更新账户密码。收集时间戳证据(电子邮件、UI截图、日志)。
5. 在重置后使用攻击者持有的刷新令牌
|
|
漏洞结果:服务器返回新的访问令牌(可能还有轮换的刷新令牌)。这证明刷新令牌在密码重置后未被撤销。
6. 访问受保护端点
|
|
结果:尽管密码已更改,我仍然可以检索用户信息并与账户交互。
影响
持久性账户接管(严重):攻击者在密码重置后仍保持访问权限。
个人数据泄露(高):访问/userinfo返回的个人身份信息(电话、地址等)。
欺诈/付费内容滥用(高):可能消耗或操纵付费内容或订阅。
运营和声誉成本(中):事件响应、用户通知、监管报告。
“此报告已被Yeswehack成功接受。”
就是这样,朋友们!我希望这份报告能为您提供有价值的见解。感谢您花时间阅读。如果您有任何想法或问题,请在评论区分享。
再次感谢,祝漏洞狩猎愉快!
我的LinkedIn:www.linkedin.com/in/hossam-mostafa-527842325