Performs authorized AWS privilege escalation assessments using Pacu, CloudFox, Principal Mapper, and IAM policy analysis to identify IAM misconfigurations enabling user/role privilege elevation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cybersecurity-skills-zh:performing-aws-privilege-escalation-assessmentThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- 对 AWS IAM 配置进行已授权的渗透测试时
不适用于:未授权的 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 个已测试向量
npx claudepluginhub killvxk/cybersecurity-skills-zhScans AWS IAM configurations for privilege escalation paths using Pacu, CloudFox, and Principal Mapper. Helps validate least-privilege policies and assess credential blast radius.
Scans AWS IAM configurations for privilege escalation paths using Pacu, CloudFox, and Principal Mapper. Helps validate least-privilege policies and assess credential blast radius.
Identifies AWS IAM privilege escalation paths using Pacu, CloudFox, Principal Mapper, and policy simulation during authorized pentests to validate least privilege.