npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
- 对 AWS IAM 配置进行已授权的渗透测试时
Identifies AWS IAM privilege escalation paths using Pacu, CloudFox, Principal Mapper, and policy simulation during authorized pentests to validate least privilege.
Identifies AWS IAM privilege escalation paths using Pacu, CloudFox, Principal Mapper, policy simulation, and AWS CLI. For authorized pentests validating least privilege.
Detects AWS IAM privilege escalation paths using boto3 and Cloudsplaining analysis. Identifies overly permissive policies, dangerous permission combos, and least privilege violations.
Share bugs, ideas, or general feedback.
不适用于:未授权的 AWS 账户测试、非 IAM 攻击向量(SSRF、应用漏洞)的评估,或作为全面云渗透测试的替代方案。测试前务必获取书面授权。
pip install pacu)go install github.com/BishopFox/cloudfox@latest)pip install principalmapper)在尝试权限提升前,建立测试主体的基线权限。
# 获取当前身份
aws sts get-caller-identity
# 枚举当前用户的内联和附加策略
aws iam list-user-policies --user-name test-user
aws iam list-attached-user-policies --user-name test-user
# 获取组成员关系和组策略
aws iam list-groups-for-user --user-name test-user
for group in $(aws iam list-groups-for-user --user-name test-user --query 'Groups[*].GroupName' --output text); do
echo "=== 组: $group ==="
aws iam list-group-policies --group-name "$group"
aws iam list-attached-group-policies --group-name "$group"
done
# 模拟特定 API 调用以映射有效权限
aws iam simulate-principal-policy \
--policy-source-arn arn:aws:iam::ACCOUNT:user/test-user \
--action-names iam:CreateUser iam:AttachUserPolicy iam:PassRole \
lambda:CreateFunction ec2:RunInstances sts:AssumeRole \
--query 'EvaluationResults[*].[EvalActionName,EvalDecision]' --output table
使用 Pacu 的权限提升扫描器识别已知的 IAM 提升技术。
# 启动 Pacu 会话
pacu
# 创建会话并设置凭据
Pacu (new:session) > set_keys --key-alias privesc-test
# 枚举 IAM 配置
Pacu > run iam__enum_users_roles_policies_groups
Pacu > run iam__enum_permissions
# 运行权限提升扫描器
Pacu > run iam__privesc_scan
# 扫描器检查 21+ 种已知提升方法,包括:
# - iam:CreatePolicyVersion(创建管理员策略版本)
# - iam:SetDefaultPolicyVersion(恢复到宽松的旧版本)
# - iam:AttachUserPolicy / iam:AttachRolePolicy(附加管理员策略)
# - iam:PutUserPolicy / iam:PutRolePolicy(创建内联管理员策略)
# - iam:PassRole + lambda:CreateFunction(使用管理员角色的 Lambda)
# - iam:PassRole + ec2:RunInstances(使用管理员实例配置文件的 EC2)
# - iam:CreateLoginProfile / iam:UpdateLoginProfile(设置控制台密码)
# - iam:CreateAccessKey(为其他用户创建密钥)
# - sts:AssumeRole(担任权限更高的角色)
# - glue:CreateDevEndpoint + iam:PassRole(使用管理员角色的 Glue)
使用 Principal Mapper 构建所有 IAM 主体的图谱并识别提升边。
# 收集 IAM 数据用于图谱构建
pmapper graph create --account ACCOUNT_ID
# 查询到管理员的路径
pmapper query 'who can do iam:AttachUserPolicy with * on *'
pmapper query 'who can do sts:AssumeRole with arn:aws:iam::ACCOUNT:role/AdminRole'
# 找出所有可以提升到管理员的主体
pmapper analysis
# 可视化权限提升图谱
pmapper visualize --filetype png
# 检查特定提升路径
pmapper query 'can arn:aws:iam::ACCOUNT:user/test-user do iam:CreatePolicyVersion with *'
pmapper query 'can arn:aws:iam::ACCOUNT:user/test-user do sts:AssumeRole with arn:aws:iam::ACCOUNT:role/*'
评估跨账户信任策略中配置错误的角色担任,这些错误可能允许未授权的权限提升。
# 列出所有角色及其信任策略
aws iam list-roles --query 'Roles[*].[RoleName,Arn]' --output text | while read name arn; do
trust=$(aws iam get-role --role-name "$name" --query 'Role.AssumeRolePolicyDocument' --output json 2>/dev/null)
# 检查通配符或宽泛信任
echo "$trust" | python3 -c "
import json, sys
doc = json.load(sys.stdin)
for stmt in doc.get('Statement', []):
principal = stmt.get('Principal', {})
condition = stmt.get('Condition', {})
if isinstance(principal, dict):
aws_princ = principal.get('AWS', '')
else:
aws_princ = principal
if '*' in str(aws_princ) or 'root' in str(aws_princ):
has_external_id = 'sts:ExternalId' in str(condition)
has_mfa = 'aws:MultiFactorAuthPresent' in str(condition)
print(f'角色: $name')
print(f' 主体: {aws_princ}')
print(f' 需要 ExternalId: {has_external_id}')
print(f' 需要 MFA: {has_mfa}')
if not has_external_id and not has_mfa:
print(f' 警告: 无 ExternalId 或 MFA 条件 - 存在混淆代理风险')
" 2>/dev/null
done
# 测试角色担任
aws sts assume-role \
--role-arn arn:aws:iam::TARGET_ACCOUNT:role/CrossAccountRole \
--role-session-name privesc-test \
--duration-seconds 900
使用 CloudFox 识别额外的攻击面,包括基于资源的策略和特定服务的提升路径。
# 运行所有 CloudFox 检查
cloudfox aws --profile target-account all-checks -o ./cloudfox-output/
# 特定权限提升检查
cloudfox aws --profile target-account permissions
cloudfox aws --profile target-account role-trusts
cloudfox aws --profile target-account access-keys
cloudfox aws --profile target-account env-vars # Lambda 环境变量中的密钥
cloudfox aws --profile target-account instances # 带实例配置文件的 EC2
cloudfox aws --profile target-account endpoints # 暴露的服务
整理所有发现的提升路径,包含概念验证步骤和修复建议。
# 生成综合报告
cat > privesc-report.md << 'EOF'
# AWS 权限提升评估报告
## 已测试的提升向量
| 向量 | 状态 | 起始主体 | 提升至 | 风险 |
|--------|--------|--------------------|--------------|------|
| iam:CreatePolicyVersion | 可利用 | test-user | AdministratorAccess | 严重 |
| iam:PassRole + lambda:CreateFunction | 可利用 | dev-role | LambdaAdminRole | 严重 |
| sts:AssumeRole(跨账户) | 可利用 | test-user | ProdAdminRole | 高 |
| iam:AttachUserPolicy | 已阻止 | test-user | N/A | N/A |
| ec2:RunInstances + iam:PassRole | 已阻止 | test-user | N/A | N/A |
## 修复建议
1. 对所有 IAM 用户和角色应用权限边界
2. 从非管理员主体移除 iam:CreatePolicyVersion
3. 为所有跨账户角色信任策略添加 sts:ExternalId 条件
4. 实施 SCP 护栏,阻止权限提升操作
EOF
| 术语 | 定义 |
|---|---|
| IAM 权限提升(IAM Privilege Escalation) | 利用过度宽松的 IAM 策略,获取比原本授予主体更高级别的访问权限 |
| 权限边界(Permission Boundary) | 设置主体最大权限的 IAM 策略,无论其附加的基于身份的策略如何 |
| iam:PassRole | 允许主体将 IAM 角色传递给 AWS 服务的 IAM 操作,使服务能够以该角色的权限行事 |
| 混淆代理(Confused Deputy) | 攻击者欺骗受信任服务代表其执行操作的攻击,通过无外部 ID 验证的跨账户角色担任实现 |
| 服务控制策略(Service Control Policy) | AWS Organizations 策略,为成员账户设置最大权限,提供防止权限提升的护栏 |
| Principal Mapper | 将 IAM 主体及其提升路径建模为有向图进行分析的开源工具 |
场景背景:在已授权评估期间,测试人员发现一个开发者角色具有 iam:CreatePolicyVersion 权限,该权限允许创建具有任意权限的任何客户管理策略的新版本。
方法:
iam__enum_permissions 枚举附加到开发者角色的策略iam:CreatePolicyVersion"Action": "*", "Resource": "*", "Effect": "Allow" 的新策略版本iam:ListUsers、s3:ListBuckets 等验证管理员访问iam:CreatePolicyVersion 并实施权限边界常见陷阱:AWS 将托管策略限制为 5 个版本。如果已有 5 个版本,必须先删除一个版本才能创建新版本。始终记录原始默认版本以便清理时恢复。如果权限边界配置正确,可以阻止此提升,因此在声明发现前先验证边界策略。
AWS 权限提升评估报告
=============================================
账户: 123456789012(生产环境)
评估日期: 2026-02-23
起始主体: arn:aws:iam::123456789012:user/test-user
起始权限: S3 只读、Lambda 调用、EC2 描述
授权: CISO 签署,项目编号 #PT-2026-014
发现的提升路径: 4
[PRIVESC-001] iam:CreatePolicyVersion -> 管理员
严重程度: 严重
起始权限: policy/dev-policy 上的 iam:CreatePolicyVersion
提升方式: 创建版本 6,设置 Action:* Resource:*
利用时间: < 2 分钟
修复建议: 移除 iam:CreatePolicyVersion,应用权限边界
[PRIVESC-002] iam:PassRole + lambda:CreateFunction -> LambdaAdminRole
严重程度: 严重
起始权限: iam:PassRole, lambda:CreateFunction
提升方式: 使用 AdminRole 创建 Lambda 函数,调用以获取管理员凭据
利用时间: < 5 分钟
修复建议: 使用条件键将 iam:PassRole 限制到特定角色 ARN
[PRIVESC-003] sts:AssumeRole -> 跨账户管理员
严重程度: 高
起始权限: sts:AssumeRole(arn:aws:iam::987654321098:role/SharedRole)
提升方式: 角色信任策略允许源账户中的任何主体
修复建议: 添加 sts:ExternalId 条件,将 Principal 限制为特定角色
提升路径总计: 4(2 个严重,1 个高,1 个中)
已实施权限边界: 0 / 47 个 IAM 主体
SCP 护栏阻止提升: 0 / 3 个已测试向量