On Sunday 7 July 2024 at 16:19 UTC, a credential stuffing targeted a crypto exchange customer in the Benelux. The attack peaked at 551.5 million requests per second and lasted 115 minutes. Traffic originated from 3801 autonomous systems in 82 countries, predominantly compromised cloud VMs.
| Vector | credential stuffing |
| Peak | 551.5 million requests per second |
| Duration | 115 min |
| Time to mitigation | 0.169 s |
| Attack traffic reaching origin | 0.024% |
| Legitimate traffic challenged | 0.36% |
Timeline
The attack was preceded by a publicly announced sales event. Request rates on the targeted routes exceeded their hourly baseline by a factor of 314 within 19 seconds. The risk score of participating clients crossed the challenge threshold automatically and proof-of-work difficulty rose with origin load.
What the customer saw
The customer’s status page stayed green throughout; they learned about the attack from our notification.
Recommendations
- Lower challenge thresholds on authentication endpoints during high-risk events.
- Enable log streaming to your SIEM for faster correlation.
- Add a dedicated rate limit for the targeted route.
The point about origin IPs leaking through certificate transparency logs is underrated.
This matches what we see in iGaming around big matches.
Solid runbook advice. The DNS-at-2am point hit home.
Any plans to support per-tenant limits keyed on a JWT claim?
Solid runbook advice. The DNS-at-2am point hit home.
Clear and practical, thanks.
Machine-readable ranges are at /ips.json and via the API.
Great write-up. We saw almost the same pattern on our login endpoint last month.
Do you publish the edge IP ranges in a machine-readable format?
Would love a follow-up on how you handle HTTP/3 fingerprinting.