WWW
EC2 · WAF EC2
EC2 · WAF EC2
IMDSv1
IMDSv1
ISRM-WAF-Role
ISRM-WAF-Role
S3 · logs
S3 · logs
S3 · backup-1
S3 · backup-1
S3 · customer-data
S3 · customer-data
SCN-001 / SSRF + IMDSv1 + Overprivileged Role / 2019

Capital One 2019

Server-side request forgery against a misconfigured WAF reached the EC2 metadata service, lifted credentials for an overprivileged role, and walked into three S3 buckets unchallenged.
100M
records exfil
$190M
total damage
3
misconfigs chained
4h
dwell time
Paige Thompson · convicted 2022
A misconfigured WAF reached EC2 metadata, lifted IAM credentials, and walked into three S3 buckets. The fix was scoping one IAM role.
$270M
Exposure
$80M OCC fine 2020 + $190M class settlement 2021
4 months
Time to detect
breach March 22-23, 2019; detected July 19 via attacker boast on GitHub
1 IAM scope
Fix complexity
restrict WAF role to specific buckets, not s3:* on all
Ask your team this Friday
Are any of our IAM roles assumable from ec2.amazonaws.com with s3:* on production buckets?
Audit my environment
HTTP
STEP 01 Attacker probes for SSRF
SSRF payload disguised as a preview URL
1GET /api/preview?url=http%3A%2F%2F169.254.169.254%2Flatest%2Fmeta-data%2Fiam%2Fsecurity-credentials%2F HTTP/1.1
2Host: vulnerable-waf.example.com
3User-Agent: curl/7.61
4Accept: */*
5
6# ⚠ url= contains 169.254.169.254 - AWS metadata endpoint.
7# ⚠ WAF should block; the SecRule is defined but not active.
Opening move · URL-encoded payload disguised as a preview request. Designed to force the WAF to fetch the IMDS endpoint server-side.
1 / 5
← back
demo state
Export

Generate audit report

Self-contained snapshot of this scenario - step-by-step chain, fixes, ATT&CK mappings, threat actor context.
Click to highlight toxic edges
What if…
node label
Remove this node
Strip outgoing permissions
Reset to original R
REMOVING NODE - saves 0 nodes Esc · R
Right-click any node to test a fix
BREAK POINT
Cut this edge → -- nodes unreachable
Fix: --