bugbounty:由301重定向获取AWS安全凭证
字数 1896 2025-08-26 22:11:29
通过301重定向获取AWS安全凭证的漏洞分析与利用
漏洞概述
本案例展示了一个由开放重定向漏洞演变为服务器端请求伪造(SSRF),最终获取AWS EC2实例安全凭证的完整攻击链。攻击者利用ASP.NET应用程序中的路由配置错误,通过精心构造的URL实现了对AWS元数据服务的访问,从而获取敏感凭证。
漏洞发现过程
1. 初始发现
-
应用程序技术栈识别:
- 通过响应头确认应用程序使用Windows IIS/10.0服务器
- 基于ASP.NET Core MVC框架构建
-
路由行为测试:
- 访问根路径带随机参数(
/xyxyz)返回404 - 访问
/myaccount/xyyyz时出现301重定向到/myaccount - 关键发现:当路径包含HTTP/HTTPS协议时(
/myaccount/http://evilzone.org),服务器会处理但URL保持不变
- 访问根路径带随机参数(
2. 重定向分析
-
路由逻辑推断:
/myaccount→ 调用myaccountApi/myaccount/^(http|https)→ 将URL传递给上游服务器- 其他不匹配条件 → 执行
myaccountApi.MyProfile操作
-
开发错误分析:
- 可能是测试代码意外推送到生产环境
- 上游代理配置错误导致的安全隐患
漏洞利用链
1. 开放重定向 → SSRF
-
使用Requestbin测试:
- 请求
https://redacted.com/myaccount/https://en1sxi232vmus.x.pipedream.net/ - 观察响应头中的
X-Forwarded-For包含两个IP:- 客户端IP(攻击者)
- 服务器IP(上游代理)
- 请求
-
确认服务器端重定向:
- 不同于客户端重定向,服务器实际处理了请求
- 表明存在SSRF漏洞可能性
2. SSRF利用
-
内部端口扫描:
- 测试
http://127.0.0.1:80→ 返回200(端口开放) - 测试
http://127.0.0.1:21→ 返回000(端口关闭/过滤) - 实现了基本的内部服务器端口扫描能力
- 测试
-
AWS环境识别:
- 响应头中包含
X-Amz-Cf-Id和cloudfront关键字 - 确认应用程序部署在AWS基础设施上
- 响应头中包含
3. 访问AWS元数据服务
-
元数据API访问:
- 请求
http://169.254.169.254/latest/meta-data - 成功获取EC2实例元数据
- 请求
-
获取SSH公钥:
- 请求
http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key - 成功获取实例的SSH公钥
- 请求
-
获取安全凭证:
- 请求
http://169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance - 成功获取AWS安全凭证(虽然关联IAM角色权限有限)
- 请求
漏洞根本原因
-
代码层面:
- 未经审查的测试代码推送到生产环境
- 路由逻辑存在缺陷,未对用户输入进行充分验证
-
架构层面:
- 上游代理配置错误,未正确处理重定向
- 缺乏对内部服务访问的限制
-
安全实践:
- 缺乏代码审查流程
- 测试与生产环境隔离不足
防御措施
1. 代码层面
-
输入验证:
- 严格验证所有用户提供的URL
- 禁止访问内部IP地址和元数据服务
-
路由安全:
- 实现明确的路由规则
- 避免使用通配符或模糊匹配
2. 架构层面
-
代理配置:
- 正确配置上游代理规则
- 限制代理转发的目标地址
-
AWS安全:
- 使用IMDSv2(需要令牌的元数据服务)
- 限制EC2实例元数据服务的访问
- 为IAM角色应用最小权限原则
3. 流程层面
-
代码管理:
- 实施严格的代码审查流程
- 区分测试与生产代码
-
安全测试:
- 定期进行安全审计
- 包括SSRF和内部服务访问测试
时间线与修复
-
报告时间线:
- 2019年5月25日:提交漏洞报告
- 2019年5月26日:漏洞标记为已修复
- 2019年5月26日:确认修复
- 2019年5月30日:获得奖励
-
修复措施:
- 修正路由处理逻辑
- 限制对内部服务的访问
- 更新代理配置规则
总结
本案例展示了看似无害的开放重定向如何演变为严重的SSRF漏洞,最终导致云环境凭证泄露。它强调了:
- 输入验证的重要性
- 测试代码管理的关键性
- 云环境安全配置的必要性
- 多层防御策略的价值
开发者和安全团队应从该案例中吸取教训,加强代码审查、完善安全配置,并定期进行安全测试,以防止类似漏洞的出现。