挖洞经验 | Mail.ru子域名网站的密码重置型账户劫持漏洞
字数 1221 2025-08-15 21:31:42

Mail.ru子域名网站密码重置型账户劫持漏洞分析报告

漏洞概述

本报告详细分析了Mail.ru旗下子域名网站cups.mail.ru存在的一个密码重置型账户劫持漏洞。该漏洞允许攻击者在不知道当前密码的情况下,通过修改密码重置请求参数来接管任意用户账户。

漏洞发现背景

  • 发现时间:2020年4月
  • 发现方式:通过Hackerone众测项目
  • 漏洞奖励:$1500

正常密码重置流程

  1. 初始请求

    • 用户访问密码重置链接:https://cups.mail.ru/faq/restore-password/restore?step=1
    • 输入绑定邮箱并提交
  2. OTP验证

    • 系统向用户邮箱发送一次性OTP密码
    • 页面跳转至OTP输入页面:https://cups.mail.ru/faq/restore-password/restore?step=3
    • 用户输入有效OTP密码
  3. 密码重置

    • 跳转至密码重置页面:https://cups.mail.ru/faq/restore-password/restore?step=4
    • 正常请求包含以下JSON数据:
      {
        "password": "password",
        "email": "user@gmail.com",
        "code": "onetimepassword"
      }
      
  4. 完成重置

    • 成功重置后跳转至:https://cups.mail.ru/faq/restore-password/restore?step=5

漏洞利用方法

  1. 直接访问重置端点

    • 攻击者直接访问最终重置页面:https://cups.mail.ru/faq/restore-password/restore?step=4
  2. 修改请求参数

    • 将原始请求修改为:
      {
        "password": "reset",
        "email": "victim@mail.ru"
      }
      
    • 关键点:移除了code字段(OTP验证),直接指定受害者邮箱
  3. 执行重置

    • 转发修改后的请求
    • 系统返回重置成功页面:https://cups.mail.ru/faq/restore-password/restore?step=5
  4. 账户接管

    • 在成功页面点击"to come in"按钮
    • 直接进入受害者账户,无需任何额外验证

漏洞根本原因

  1. 缺乏权限验证

    • 密码重置功能未验证请求者是否已完成前序验证步骤
    • 允许直接访问最终重置端点
  2. 不安全的实现逻辑

    • 后端仅检查请求中的邮箱参数,未验证OTP代码
    • 重置成功后自动建立会话,无需密码验证
  3. UI设计缺陷

    • 成功页面提供直接登录功能,未进行二次确认

修复建议

  1. 加强流程验证

    • 确保密码重置必须完成所有前序步骤
    • 在服务器端维护重置流程状态
  2. 增加安全措施

    • 强制验证OTP代码
    • 对重置请求添加CSRF保护
    • 实现速率限制防止暴力破解
  3. 修改UI流程

    • 移除成功页面的自动登录功能
    • 要求用户手动输入新密码登录

漏洞影响

  • 攻击者可完全接管任意用户账户
  • 无需任何用户交互(如点击链接)
  • 仅需知道目标邮箱地址

总结

该漏洞展示了密码重置功能实现中常见的逻辑缺陷,强调了在关键账户操作中实施多因素验证的重要性。开发人员应确保安全流程的完整性,避免因跳过验证步骤而导致严重的安全问题。

Mail.ru子域名网站密码重置型账户劫持漏洞分析报告 漏洞概述 本报告详细分析了Mail.ru旗下子域名网站cups.mail.ru存在的一个密码重置型账户劫持漏洞。该漏洞允许攻击者在不知道当前密码的情况下,通过修改密码重置请求参数来接管任意用户账户。 漏洞发现背景 发现时间:2020年4月 发现方式:通过Hackerone众测项目 漏洞奖励:$1500 正常密码重置流程 初始请求 : 用户访问密码重置链接: https://cups.mail.ru/faq/restore-password/restore?step=1 输入绑定邮箱并提交 OTP验证 : 系统向用户邮箱发送一次性OTP密码 页面跳转至OTP输入页面: https://cups.mail.ru/faq/restore-password/restore?step=3 用户输入有效OTP密码 密码重置 : 跳转至密码重置页面: https://cups.mail.ru/faq/restore-password/restore?step=4 正常请求包含以下JSON数据: 完成重置 : 成功重置后跳转至: https://cups.mail.ru/faq/restore-password/restore?step=5 漏洞利用方法 直接访问重置端点 : 攻击者直接访问最终重置页面: https://cups.mail.ru/faq/restore-password/restore?step=4 修改请求参数 : 将原始请求修改为: 关键点:移除了 code 字段(OTP验证),直接指定受害者邮箱 执行重置 : 转发修改后的请求 系统返回重置成功页面: https://cups.mail.ru/faq/restore-password/restore?step=5 账户接管 : 在成功页面点击"to come in"按钮 直接进入受害者账户,无需任何额外验证 漏洞根本原因 缺乏权限验证 : 密码重置功能未验证请求者是否已完成前序验证步骤 允许直接访问最终重置端点 不安全的实现逻辑 : 后端仅检查请求中的邮箱参数,未验证OTP代码 重置成功后自动建立会话,无需密码验证 UI设计缺陷 : 成功页面提供直接登录功能,未进行二次确认 修复建议 加强流程验证 : 确保密码重置必须完成所有前序步骤 在服务器端维护重置流程状态 增加安全措施 : 强制验证OTP代码 对重置请求添加CSRF保护 实现速率限制防止暴力破解 修改UI流程 : 移除成功页面的自动登录功能 要求用户手动输入新密码登录 漏洞影响 攻击者可完全接管任意用户账户 无需任何用户交互(如点击链接) 仅需知道目标邮箱地址 总结 该漏洞展示了密码重置功能实现中常见的逻辑缺陷,强调了在关键账户操作中实施多因素验证的重要性。开发人员应确保安全流程的完整性,避免因跳过验证步骤而导致严重的安全问题。