零点击密码重置漏洞导致账户劫持的深度分析

本文详细分析了Remitly网站存在的零点击账户劫持漏洞,攻击者可通过密码重置功能中的JWT令牌泄露,无需用户交互即可完全控制受害者账户,涉及具体的技术步骤和修复验证过程。

[CRITICAL] 通过密码重置实现零点击账户劫持 [AUTH-3243] /orchestrator/v1/password_reset/start

摘要

在目标网站的密码重置功能中发现了一个零点击账户劫持漏洞。此漏洞允许攻击者在无需受害者任何交互或同意的情况下重置受害者密码,导致受害者账户被完全控制。

操作系统: WINDOWS
是否使用VPN: 否
浏览器: 攻击者使用FIRFOX,受害者使用Burp Browser

复现步骤

  1. 访问密码重置页面: 导航至网站的“忘记密码”或“重置密码”部分。
  2. 为受害者和攻击者账户发起密码重置: 在密码重置表单中输入受害者的电子邮件地址,同时输入攻击者的电子邮件地址以发起密码重置。
  3. 捕获密码重置请求: 使用Burp Suite或OWASP ZAP等代理工具拦截提交密码重置请求时的HTTP请求。
  4. 分析泄露的信息:
    • 端点: /orchestrator/v1/password_reset/start
    • 需要从此特定端点获取JWT令牌。
    • 有两个同名的端点:一个端点在其响应中不包含JWT令牌,另一个包含JWT令牌(攻击所必需)。
    • 确保定位到在密码重置过程中提供JWT令牌的正确端点。
    • 来自任何其他端点的受害者JWT令牌均无效。
    • 下载Burp Suite的JSON Web Token工具,该工具将以绿色高亮显示包含JWT令牌的请求,帮助轻松识别正确端点。
    • 仅提到的端点 /orchestrator/v1/password_reset/start 有效,可用于获取攻击所需的JWT。
    • 此端点可能不会在第一次尝试时出现;可能需要重复过程。
    • 如录制视频所示,它在第二次尝试时出现。
    • 检查拦截的请求并识别敏感参数,如:
      • AMP_d0cf3ed24c: 包含设备ID、用户ID和会话ID等用户信息。
      • JWT: 包含用户电子邮件和其他信息的JSON Web令牌。
    • 保存这两个参数。
  5. 输入一次性密码(OTP): 输入通过电子邮件或手机接收的OTP以继续密码重置(攻击者账户)。
  6. 修改HTTP请求: 在发送密码重置请求之前,将HTTP请求中的会话数据替换为受害者的会话数据:
    • 将“AMP_d0cf3ed24c和JWT”值替换为从泄露请求中获取的受害者值。
  7. 发送修改后的请求
  8. 访问受害者账户: 如果成功,您将能够在无需受害者任何交互的情况下重置受害者密码。使用受害者的电子邮件地址和您设置的新密码登录。

概念验证(POC)视频:

  • poc1(0account_take_over).mp4 71.33 MiB
  • poc2(0account_take_over).mp4 6.05 MiB

影响

摘要: 发现的漏洞允许攻击者在无需用户交互或特殊权限的情况下重置受害者账户的密码。通过拦截密码重置请求并用受害者的会话数据进行修改,攻击者可以成功接管账户。此外,该网站允许转账,通过利用此漏洞,攻击者可能从受害者账户窃取资金。

要求:

  • 访问受害者的密码重置请求:通过Burp Suite或OWASP ZAP等工具拦截。
  • 了解受害者的会话信息:包括AMP_d0cf3ed24c和JWT等令牌,这些在拦截的请求中可用。
  • 访问攻击者自己的OTP(一次性密码):攻击者需要自己的OTP进行密码重置。
  • 修改HTTP请求的能力:攻击者需要能够将自己的会话数据替换为受害者的会话数据以执行攻击。

获得的权限:

  • 完全账户控制:攻击者可以重置受害者密码并登录账户,无需受害者凭据。
  • 访问机密数据:攻击者可以访问受害者账户中的敏感信息,包括个人详细信息、电子邮件和其他私人数据。
  • 操纵账户设置:攻击者可以修改账户设置、更改与账户关联的电子邮件地址或执行通常需要用户同意的其他操作。
  • 可能锁定受害者:攻击者可以更改密码并阻止受害者访问自己的账户,导致潜在的服务拒绝。
  • 窃取资金:由于网站允许转账,攻击者可以将受损账户中的所有资金转移到自己的账户, effectively stealing money from the victims.

附件

2个附件:

  • F3749680: poc1(0account_take_over).mp4
  • F3749681: poc2(0account_take_over).mp4

时间线活动

  • 2024年11月10日下午2:56 UTC: db3wy提交报告给Remitly。
  • 2024年11月12日下午3:18 UTC: db3wy发布评论,详细说明如何通过强制网站请求CAPTCHA来触发泄露JWT的请求,并提供了额外的POC视频和图像。
  • 2024年11月13日下午6:01 UTC: Remitly员工francoisd11将状态更改为“需要更多信息”,请求演示攻击并获取特定用户的全名作为标志。
  • 2024年11月14日上午4:27 UTC: db3wy将状态更改为“新建”,确认完成了账户劫持,提供了标志“Buggy Bounties”和新的POC视频及图像。
  • 2024年11月14日上午4:52 UTC: francoisd11将状态更改为“已分类”,确认了发现和严重性,并请求不要在此渠道外讨论。
  • 2024年11月14日上午5:18和5:19 UTC: 报告标题多次更新,最终为[CRITICAL] 0-Click Account Takeover via Password Reset [AUTH-3243] /orchestrator/v1/password_reset/start。
  • 2024年11月14日上午8:03 UTC: db3wy确认理解并希望快速解决漏洞。
  • 2024年11月14日下午6:13 UTC: francoisd11将状态更改为“重新测试”,邀请报告者进行50美元的重新测试。
  • 2024年11月15日上午5:08 UTC: db3wy完成重新测试,确认问题已修复,JWT令牌仅适用于更改攻击者自己的密码。
  • 2024年11月15日上午6:32 UTC: Remitly奖励db3wy 50美元用于重新测试,francoisd11将报告关闭并状态更改为“已解决”。
  • 2024年11月15日上午7:57 UTC: db3wy询问漏洞奖金,francoisd11回复称由于金额较大,需要大约35天进行额外验证。
  • 2024年12月17日上午5:09 UTC和12月22日上午7:57 UTC: db3wy跟进奖金更新。
  • 2024年12月23日上午7:53 UTC: Remitly奖励db3wy奖金。
  • 2024年12月23日下午3:11 UTC: db3wy感谢认可和奖励。
  • 2025年6月21日下午10:23 UTC: db3wy请求披露此报告,报告于2025年7月21日下午10:23 UTC披露。

报告详情

  • 报告ID: #2831902
  • 状态: 已解决
  • 严重性: 严重 (9.8)
  • 披露日期: 2025年7月21日下午10:23 UTC
  • 弱点: 不当的访问控制 - 通用
  • CVE ID: 无
  • 奖金: 隐藏
  • 账户详情: 无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计