挖洞经验 | 与Yahoo和Paypal相关的两个独特漏洞($5k+$3.2k)
字数 1431 2025-08-18 11:38:28
雅虎IDOR与PayPal DoS漏洞分析与防御教学
一、雅虎IDOR漏洞分析 ($5,000)
漏洞概述
漏洞类型:不安全的直接对象引用(Insecure Direct Object Reference, IDOR)
影响系统:Yahoo Notepad (雅虎网络笔记)
漏洞奖励:$5,000
漏洞发现过程
-
初始观察:
- 测试目标:https://notepad.yahoo.com
- 使用Burp Suite拦截请求时发现加密用户ID:
fziy4wzxr41k4qwsgumu2v2qymynzat6kclqpwmc - 请求示例:
GET /ws/v3/users/fziy4wzxr41k4qwsgumu2v2qymynzat6kclqpwmc/items?format=json&count=200&type=Journal&wssid=55mJmcMk3tg&rand=1478541308397&prog=aeon
-
漏洞验证:
- 将加密ID替换为明文用户名后,服务端返回相同响应
- 替换为其他测试账户用户名(test_account_2222)后,成功获取该账户笔记内容
-
根本原因:
- 服务端仅依赖客户端提供的用户标识进行数据访问
- 缺乏对请求者身份的验证机制
- 错误假设:加密用户ID足以保证安全性
漏洞影响
- 攻击者可获取任意用户的雅虎网络笔记内容
- 无需认证即可访问敏感数据
修复建议
- 实施严格的访问控制检查
- 结合会话令牌验证请求合法性
- 即使使用加密ID,仍需后端验证请求权限
- 遵循最小权限原则
二、PayPal DoS漏洞分析 ($3,200)
漏洞概述
漏洞类型:客户端存储导致的拒绝服务(Denial of Service)
影响系统:Braintree Payments (PayPal子公司)
漏洞奖励:$3,200
漏洞发现过程
-
代码分析:
- 发现关键JavaScript代码段:
var targetLocale = window.location.href.match(/locale=(.{5})/) ? window.location.href.match(/locale=(.{5})/)[1] : null; - 功能逻辑:
- 检查URL中的locale参数(5位字符,如en-us)
- 若与currentLocale不匹配,则存储到localStorage
- 后续访问会强制重定向到
/locale页面
- 发现关键JavaScript代码段:
-
漏洞验证:
- 构造恶意链接:
https://www.braintreepayments.com/legal/policy-updates?locale=fword - 影响:
- 用户访问后会被持续重定向到
/fword - 无法正常使用网站功能
- 需清除浏览器JS缓存才能恢复
- 用户访问后会被持续重定向到
- 构造恶意链接:
漏洞影响
- 攻击者可大规模传播恶意链接
- 导致大量用户无法正常访问服务
- 需要用户手动清除缓存才能恢复
修复建议
- 对locale参数进行严格白名单验证
- 限制localStorage的使用场景
- 实现服务端locale验证机制
- 提供简单的恢复机制(如清除缓存按钮)
三、通用安全开发建议
针对IDOR漏洞
- 实施基于角色的访问控制(RBAC)
- 使用间接引用映射(如使用数字ID而非直接对象名)
- 每个请求都应验证用户权限
- 记录和监控异常访问模式
针对客户端存储风险
- 避免仅依赖客户端存储进行关键业务决策
- 对用户可控输入进行严格过滤
- 为可能被滥用的功能设置速率限制
- 提供安全的默认值和恢复机制
四、漏洞挖掘方法论
-
参数篡改测试:
- 观察请求中的各种标识符和参数
- 尝试替换为其他有效值测试访问控制
-
客户端代码审计:
- 分析JavaScript中的业务逻辑
- 寻找依赖客户端存储或用户输入的关键功能
-
异常输入测试:
- 尝试边界值和非法输入
- 观察系统如何处理异常情况
-
数据流追踪:
- 从用户输入点到最终使用点全程跟踪
- 验证每个环节的安全检查
五、总结
这两个漏洞展示了不同类型的安全问题:
- 雅虎案例展示了服务器端访问控制缺失的风险
- PayPal案例展示了过度依赖客户端逻辑的危害
共同启示:
- 不能仅依赖单一安全措施(如加密或客户端检查)
- 必须实施纵深防御策略
- 应对所有用户输入保持怀疑态度
- 安全设计应从用户角度考虑可能的滥用场景