Most AWS breaches we investigate don’t involve exotic zero-days. They involve a Lambda function with a permissive execution role, an IAM policy missing a single condition key, and an attacker who knew where to look.
The pattern is identical across engagements: an attacker compromises a low-privilege identity (often via a forgotten access key in a Git repository or a leaky CI build log). That identity has lambda:UpdateFunctionCode on at least one Lambda. The Lambda’s execution role has iam:PassRole with broad scope — or worse, the Lambda’s own role has AdministratorAccess. Game over.
Three reasons. First, AWS makes attaching AdministratorAccess the path of least resistance during initial setup. Second, IAM policies are hard to read — especially with nested condition keys and resource patterns. Third, most cloud-posture tools alert on the public S3 bucket but not on the combination of lambda:UpdateFunctionCode + a permissive role. The attack path is invisible without graph-based analysis.
Given an access key with lambda:UpdateFunctionCode on function thumbnailer, the attacker:
aws lambda get-functions3:GetObject on a sensitive bucket, or iam:CreateAccessKey)UpdateFunctionCodeWithin minutes the attacker has the same privileges as the Lambda’s execution role — often Domain Admin equivalent in AWS terms.
You don’t need a SIEM vendor licence to catch this. CloudTrail captures every relevant call:
UpdateFunctionCode outside business hours or from unexpected source IPsCreateFunction with a high-privilege roleAttachRolePolicy attaching anything containing * in actions or resourcesiam:PassRole events from identities not in your developer groupiam:PassRole on AdministratorAccess from non-admin identitiesIf you’ve never mapped your IAM privilege escalation paths, that’s the highest-leverage thing you can do this quarter. Open-source tools (cloudsplaining, pmapper, iam-vulnerable) make it tractable. If you’d rather have specialists walk your estate, our cloud security audit includes a complete privilege escalation graph as a standard deliverable.
Free 30-minute scoping call. Tailored proposal within 24 hours. NDA available on request.