Tarek Cheikh
Founder & AWS Cloud Architect
On July 29, 2019, Capital One announced that a former Amazon Web Services engineer had accessed personal information belonging to approximately 100 million people in the United States and approximately 6 million in Canada, one of the largest data breaches ever tied to a single cloud misconfiguration. The unauthorized access itself had happened months earlier, on March 22 and 23, 2019. It was only surfaced when an external researcher reported it through Capital One's responsible disclosure program on July 17, and the company confirmed the incident on July 19.
This is worth studying in detail because it isn't a story about a sophisticated zero-day. Every step in the chain is a well-understood AWS misconfiguration class, still common today, and every step is individually preventable with a specific, checkable control.
Per Capital One's own public statements, no credit card account numbers or login credentials were compromised, and over 99% of Social Security numbers were not exposed. What was accessed was the largest category of information Capital One held on consumers and small businesses who had applied for credit card products between 2005 and early 2019: names, addresses, zip and postal codes, phone numbers, email addresses, dates of birth, and self-reported income.
The entry point was a misconfigured web application firewall (a ModSecurity WAF) running on an EC2 instance in front of one of Capital One's applications. The misconfiguration allowed a Server-Side Request Forgery (SSRF) attack: the attacker could get the WAF to make requests on their behalf to internal AWS infrastructure it should never have been able to reach.
The SSRF was pointed at http://169.254.169.254, the EC2 Instance Metadata Service (IMDS). At the time, Capital One's instance was using IMDSv1, the original version of this service, which answers simple HTTP requests with no authentication at all. Querying /iam/security-credentials/ on IMDSv1 hands back the live temporary credentials for whatever IAM role is attached to the instance, to anyone who can reach it. That's exactly what the SSRF let the attacker do.
The credentials retrieved belonged to an IAM role with far broader permissions than the WAF instance actually needed, including the ability to list and read from a large number of S3 buckets across the account. This is the step that turned a server-side request forgery bug into a data breach of this scale: the role wasn't scoped to only the resources that specific application required.
With those temporary credentials in hand, the attacker enumerated and pulled data from more than 700 S3 buckets, the volume that produced the eventual exposure of roughly 100 million people in the US and 6 million in Canada.
Every link in this chain maps to a distinct, well-known, checkable control:
None of these are exotic. They're the same class of checks a continuous cloud posture scan runs by default, IAM policy scope, IMDS version enforcement, S3 access patterns, checked continuously rather than discovered by an external researcher months after the fact.
Sources: the dates, scope, and affected-data figures above come from Capital One's own official press release and investor disclosure (July 29, 2019) and its published incident FAQ. Capital One's own statements describe only "a specific configuration vulnerability" exploited by "a highly sophisticated individual," they don't themselves detail the WAF, SSRF, IMDS, or IAM mechanics. The technical attack-chain breakdown above is sourced from the US Department of Justice's criminal complaint in United States v. Paige A. Thompson and independent technical analysis published by Appsecco.
This article is just the start. Get the full picture with our free whitepaper - 8 chapters covering IAM, S3, VPC, monitoring, agentic AI security, compliance, and a prioritized action plan with 50+ CLI commands.
KloudSec, built by the team behind Toc Consulting
What you just read is a manual, one-time check. KloudSec runs this and 400+ more automated checks across 90+ AWS services, continuously, agentless, live in about 5 minutes.
Toc Consulting: AWS Security & Cloud Architecture
Our team helps engineering teams secure and architect AWS the right way: assessment in week one, a prioritized action plan in week two.
A single compromised AWS console login, no MFA, and a company was gone within 12 hours. The full story, and why "our backups are in AWS too" was the real failure.
A security company got breached through one exposed AWS API key on an internet-reachable instance. Even the people who build WAFs for a living can miss this.
KloudSec, an agentless AWS security platform, is live. Why I built it, and why small and growing companies deserve the same protection as the largest ones.