Two days to copy, four months to notice
Capital One says the data was copied on 22 and 23 March 2019. The bank learned about it on 17 July, when someone emailed its responsible disclosure address, the inbox a company keeps for outsiders to report security problems. The email said the bank’s data seemed to be sitting on GitHub, a public site for sharing code.
That warning came from outside. The person behind the theft had been posting about it online, in a Slack group and on Twitter, and a file on GitHub held the commands used and a list of 700 folders. Someone saw it and told the bank.
By then the copy was huge. Capital One says it affected about 100 million people in the US and about 6 million in Canada. Most of it was credit card applications from 2005 to early 2019: names, addresses, dates of birth and incomes. It also held about 140,000 US Social Security numbers, about 80,000 linked bank account numbers and about 1 million Canadian Social Insurance Numbers [2]. The bank says no credit card numbers or log-in details were taken.

How it got out
The US indictment describes four steps. None of them needed a stolen password.
- 1. Find a weak firewallThe attacker built scanners to find cloud servers whose web application firewall, the filter that sits in front of a website, was set up so that commands from outside could reach the server and run.
- 2. Ask it for its keysCommands sent through that firewall fetched the server’s security credentials: the temporary keys AWS, Amazon’s cloud, gives a server so it can use other services.
- 3. List the storageWith those keys, the attacker listed the bank’s storage folders, which AWS calls buckets.
- 4. Copy it homeThen the data was copied to a server at the attacker’s home, through a VPN and Tor to hide where the requests came from.
Step 2 is the clever part. Tricking a server into fetching its own keys is called server-side request forgery, or SSRF, and we walk through it in our deep dive on SSRF credential theft. The court papers themselves only say “misconfigured web application firewalls”. The SSRF detail comes from security reporting at the time.
The bigger mistake was what those keys were allowed to do. A firewall has no reason to read customer records. This one’s keys could list and copy the bank’s data, so stealing them was enough.
Capital One wasn’t the only target. The indictment says data was copied from more than 30 organisations, and that some of their servers were used to mine cryptocurrency.
The alarm that would have caught it
Bradley’s point in the short is that you can’t stop every misconfiguration, but you can notice when one turns into a theft. The criminal complaint says the bank’s logs showed the commands coming from Tor and a VPN service. Set against a firewall’s normal day, the theft stands out in three ways.
- 1Where its keys are usedThe source address on each requestNormal for a firewall server
The server itself, inside AWSWhat happened hereTor exit nodes and a VPN service - 2What its keys are asked to doThe actions its role performsNormal for a firewall server
Write its own logsWhat happened hereList the buckets, then copy them - 3How much data it readsBytes downloaded from storageNormal for a firewall server
Small and steadyWhat happened hereNearly 30 GB of applications
Each of those can be an alert today. GuardDuty, AWS’s own threat detection service, has a finding for the first one: keys made for one server being used from an address outside AWS. A second finding covers calls from Tor.
Check your own AWS account
- In the EC2 console, open each instance and look for IMDSv2. It should say Required. Optional means the older metadata service, the one this kind of trick abuses, still answers.
- Open the role attached to any internet-facing server and read what it allows. A web server or firewall that can list or read every storage bucket has far more than it needs.
- Turn on GuardDuty in every Region you use. It flags a server’s keys being used from outside AWS, and calls coming from Tor.
- Ask whoever runs your cloud one question: if a server started copying gigabytes out of storage tonight, who would know by morning?
The deep dive on this breach has the exact commands and policies for each of these.
What we check on a real case
When a cloud server’s keys might have been taken, these are the questions we answer first, in this order.
- Who used the keys, and from where
Every call made with the role is in CloudTrail, AWS’s record of account activity. Calls from anywhere other than the server the role belongs to come first.
- What they listed and read
Listing buckets is logged by default. Reading the files inside is only logged if S3 data events were switched on, so we check that early.
- How much left
S3 data events and request metrics show which files were read and how many bytes went out. That shapes who has to be told.
- Close the door properly
Revoke the role’s active sessions, require IMDSv2 on the server, and cut the role down to the one bucket and action it needs.
What this doesn’t prove
Written from the public reports listed under Sources, checked 13 Nov 2026.
- The court papers never use the words SSRF or metadata service. That detail comes from reporting at the time, including a source quoted by KrebsOnSecurity. It fits everything in the indictment, but it wasn’t tested in court.
- We don’t know what alerts Capital One had switched on. We only know the warning that started the investigation came from outside.
- Capital One says the weakness was a configuration mistake that could happen on its own servers too, not a flaw in the cloud itself.
- Capital One says the US government believes the data was recovered, with no evidence it was used for fraud or shared. That can’t be checked from the outside.
Sources
- 2019 Capital One Cyber Incident: What HappenedCapital One, read 13 Nov 2026
- Capital One Announces Data Security IncidentCapital One, 29 Jul 2019
- United States v. Paige A. Thompson, superseding indictment (CR19-0159, W.D. Wash.)US Department of Justice, 17 Jun 2021
- Woman Arrested in Massive Capital One Data Breach (on the criminal complaint)GovInfoSecurity, 30 Jul 2019
- Capital One Data Theft Impacts 106M PeopleKrebsOnSecurity, 30 Jul 2019
- What We Can Learn from the Capital One HackKrebsOnSecurity, Aug 2019
- GuardDuty IAM finding typesAWS documentation, read 13 Nov 2026


