CtrlK
BlogDocsLog inGet started
Tessl Logo

aws-iam-enum

Enumerate AWS IAM policies, detect privilege escalation paths per Rhino Security Labs canonical 21 primitives.

59

Quality

70%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Critical

Do not install without reviewing

Fix and improve this skill with Tessl

tessl review fix ./packages/decepticon/decepticon/skills/standard/cloud/aws-iam-enum/SKILL.md
SKILL.md
Quality
Evals
Security

AWS IAM Enumeration + Privesc

1. Identity check

aws sts get-caller-identity
aws iam get-account-summary

2. Attached policies

aws iam list-attached-user-policies --user-name ME --output json > /tmp/attached.json
aws iam list-user-policies          --user-name ME --output json > /tmp/inline.json
aws iam list-groups-for-user        --user-name ME --output json > /tmp/groups.json

For each attached policy ARN:

aws iam get-policy --policy-arn ARN --query 'Policy.DefaultVersionId'
aws iam get-policy-version --policy-arn ARN --version-id VID > /tmp/policy.json

Then:

iam_policy_audit(open("/tmp/policy.json").read())

3. Check each privesc primitive

Rhino Security's canonical 21 paths — any Allow on these is a chain step:

  1. iam:CreateAccessKey (other user)
  2. iam:CreateLoginProfile
  3. iam:UpdateLoginProfile
  4. iam:AttachUserPolicy / iam:AttachGroupPolicy / iam:AttachRolePolicy
  5. iam:PutUserPolicy / iam:PutGroupPolicy / iam:PutRolePolicy
  6. iam:CreatePolicyVersion (if SetAsDefault=true)
  7. iam:SetDefaultPolicyVersion
  8. iam:PassRole + lambda:CreateFunction + lambda:InvokeFunction
  9. iam:PassRole + ec2:RunInstances
  10. iam:PassRole + ecs:RunTask / UpdateService
  11. glue:CreateDevEndpoint / UpdateDevEndpoint
  12. cloudformation:CreateStack with iam:PassRole
  13. datapipeline:CreatePipeline
  14. lambda:UpdateFunctionCode (existing function with priv role)
  15. iam:AddUserToGroup
  16. iam:UpdateAssumeRolePolicy
  17. iam:CreateRole + sts:AssumeRole
  18. codebuild:CreateProject with iam:PassRole
  19. sagemaker:CreateTrainingJob with iam:PassRole
  20. aws-marketplace:Subscribe (rare, but noted)
  21. sts:AssumeRole (direct)

4. Graph promotion

kg_add_node(kind="vulnerability", label="IAM:CreateAccessKey → account takeover", props={"severity":"critical","source":"aws-iam"})
kg_add_node(kind="crown_jewel", label="AWS Account 1234")
kg_add_edge(src=<vuln>, dst=<crown_jewel>, kind="grants", weight=0.3)

5. Common chains

  • Dev user has iam:PassRole + lambda:CreateFunction + a Lambda role with admin → create malicious Lambda → assume admin
  • iam:UpdateLoginProfile + sts:GetFederationToken → temporary console access as another user
Repository
PurpleAILAB/Decepticon
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.