挖洞经验 | PayPal验证码质询功能(reCAPTCHA Challenge)存在的用户密码泄露漏洞
字数 1472 2025-08-18 11:39:15

PayPal验证码质询功能用户密码泄露漏洞分析报告

漏洞概述

2020年初,安全研究员Alex Birsan发现PayPal登录界面的验证码质询功能(reCAPTCHA Challenge)存在严重漏洞,攻击者可通过特定方式获取受害者的注册邮箱和明文密码。该漏洞最终获得PayPal官方$15,300的奖励,并被评定为CVSS 8.0高危漏洞。

漏洞发现过程

初始发现

研究员在分析PayPal的验证机制时,发现recaptchav3.js文件中包含两个敏感参数:

  • _csrf:CSRF令牌
  • _sessionID:会话ID

这些参数出现在JavaScript文件中,存在被跨站脚本包含(XSSI)攻击窃取的风险。

验证测试

初步测试证实了XSSI漏洞的存在:

  • 虽然每次请求都会使用混淆方法随机化变量名
  • 但敏感的用户token仍会出现在预期位置
  • 通过精心构造的攻击可提取这些信息

深入分析

参数用途调查

研究员对_csrf_sessionID进行了深入分析:

  1. 尝试替换_csrf值,发现无法实现经典CSRF攻击
  2. 尝试替换_sessionID,发现无法冒充受害者身份

验证码质询机制分析

PayPal为防止暴力破解,在多次登录失败后会触发验证码质询(reCAPTCHA challenge):

  • 用户需完成Google验证码验证
  • 验证后会向/auth/validatecaptcha发送POST请求

请求示例:

POST /auth/validatecaptcha HTTP/1.1
Host: www.paypal.com
Content-Type: application/x-www-form-urlencoded

_csrf=[CSRF_TOKEN]&_sessionID=[SESSION_ID]&jse=[JSE_VALUE]&captcha=[CAPTCHA_TOKEN]

关键漏洞点

验证码质询响应中包含自动提交表单,其中泄露了:

  • 用户最新登录请求输入的所有数据
  • 包括注册邮箱
  • 明文密码

响应示例(解析后HTML):

<form ...>
    <input type="hidden" name="email" value="victim@example.com">
    <input type="hidden" name="password" value="plaintextpassword">
    ...
</form>

参数安全性分析

  1. jse参数:实际未起到验证作用
  2. captcha参数:Google提供的验证码token,与特定用户会话无关,接受任何有效输入token

漏洞利用方法

攻击步骤

  1. 信息收集阶段

    • 利用XSSI漏洞获取受害者会话中的_csrf_sessionID
  2. 触发验证码质询

    • 使用获取的token向/auth/validatecaptcha发起POST请求
    • 模拟暴力破解尝试以触发验证码机制
  3. 窃取凭证

    • 当受害者成功登录后
    • 质询响应中包含邮箱和明文密码
    • 攻击者通过恶意页面获取这些信息

扩展攻击面

该漏洞不仅存在于登录框架,还存在于:

  • 未经用户授权的支付页面
  • 可获取用户的敏感支付数据

漏洞时间线

  • 2019.11.18:漏洞提交至PayPal的HackerOne项目
  • 2019.12:PayPal确认漏洞有效性
  • 2019.12.10:获得$15,300奖励,评定为CVSS 8.0

修复方案

PayPal采取的修复措施:

  1. /auth/validatecaptcha端点添加CSRF token验证
  2. 防止跨站脚本包含攻击

安全建议

  1. 密码存储原则

    • 永远不要以明文方式存储或传输密码
    • 即使临时存储也应加密
  2. 敏感信息保护:

    • 避免在JavaScript文件中暴露敏感token
    • 对关键端点实施严格的CSRF保护
  3. 验证机制改进:

    • 确保验证码token与用户会话绑定
    • 验证所有关键参数的有效性
  4. 安全开发实践:

    • 对边缘功能进行同等严格的安全审查
    • 定期进行安全审计和渗透测试

总结

该漏洞展示了几个关键安全问题:

  1. 边缘功能的安全同样重要
  2. 敏感信息不应出现在客户端脚本中
  3. 密码明文传输是严重的安全隐患
  4. 验证机制需要全面考虑所有参数的安全性

通过此案例,安全开发人员应更加重视:

  • 所有功能组件的安全设计
  • 敏感信息的全生命周期保护
  • 防御机制的完整性验证
PayPal验证码质询功能用户密码泄露漏洞分析报告 漏洞概述 2020年初,安全研究员Alex Birsan发现PayPal登录界面的验证码质询功能(reCAPTCHA Challenge)存在严重漏洞,攻击者可通过特定方式获取受害者的注册邮箱和明文密码。该漏洞最终获得PayPal官方$15,300的奖励,并被评定为CVSS 8.0高危漏洞。 漏洞发现过程 初始发现 研究员在分析PayPal的验证机制时,发现 recaptchav3.js 文件中包含两个敏感参数: _csrf :CSRF令牌 _sessionID :会话ID 这些参数出现在JavaScript文件中,存在被跨站脚本包含(XSSI)攻击窃取的风险。 验证测试 初步测试证实了XSSI漏洞的存在: 虽然每次请求都会使用混淆方法随机化变量名 但敏感的用户token仍会出现在预期位置 通过精心构造的攻击可提取这些信息 深入分析 参数用途调查 研究员对 _csrf 和 _sessionID 进行了深入分析: 尝试替换 _csrf 值,发现无法实现经典CSRF攻击 尝试替换 _sessionID ,发现无法冒充受害者身份 验证码质询机制分析 PayPal为防止暴力破解,在多次登录失败后会触发验证码质询(reCAPTCHA challenge): 用户需完成Google验证码验证 验证后会向 /auth/validatecaptcha 发送POST请求 请求示例: 关键漏洞点 验证码质询响应中包含自动提交表单,其中泄露了: 用户最新登录请求输入的所有数据 包括注册邮箱 明文密码 响应示例(解析后HTML): 参数安全性分析 jse 参数:实际未起到验证作用 captcha 参数:Google提供的验证码token,与特定用户会话无关,接受任何有效输入token 漏洞利用方法 攻击步骤 信息收集阶段 : 利用XSSI漏洞获取受害者会话中的 _csrf 和 _sessionID 触发验证码质询 : 使用获取的token向 /auth/validatecaptcha 发起POST请求 模拟暴力破解尝试以触发验证码机制 窃取凭证 : 当受害者成功登录后 质询响应中包含邮箱和明文密码 攻击者通过恶意页面获取这些信息 扩展攻击面 该漏洞不仅存在于登录框架,还存在于: 未经用户授权的支付页面 可获取用户的敏感支付数据 漏洞时间线 2019.11.18:漏洞提交至PayPal的HackerOne项目 2019.12:PayPal确认漏洞有效性 2019.12.10:获得$15,300奖励,评定为CVSS 8.0 修复方案 PayPal采取的修复措施: 在 /auth/validatecaptcha 端点添加CSRF token验证 防止跨站脚本包含攻击 安全建议 密码存储原则 : 永远不要以明文方式存储或传输密码 即使临时存储也应加密 敏感信息保护: 避免在JavaScript文件中暴露敏感token 对关键端点实施严格的CSRF保护 验证机制改进: 确保验证码token与用户会话绑定 验证所有关键参数的有效性 安全开发实践: 对边缘功能进行同等严格的安全审查 定期进行安全审计和渗透测试 总结 该漏洞展示了几个关键安全问题: 边缘功能的安全同样重要 敏感信息不应出现在客户端脚本中 密码明文传输是严重的安全隐患 验证机制需要全面考虑所有参数的安全性 通过此案例,安全开发人员应更加重视: 所有功能组件的安全设计 敏感信息的全生命周期保护 防御机制的完整性验证