On Wednesday 19 February 2025 at 23:36 UTC, a credential stuffing targeted a crypto exchange customer in Latin America. The attack peaked at 632.0 million requests per second and lasted 29 minutes. Traffic originated from 978 autonomous systems in 38 countries, predominantly misconfigured open reflectors.
| Vector | credential stuffing |
| Peak | 632.0 million requests per second |
| Duration | 29 min |
| Time to mitigation | 0.712 s |
| Attack traffic reaching origin | 0.073% |
| Legitimate traffic challenged | 0.12% |
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 445 within 35 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
No customer-visible impact. The on-call engineer was notified and acknowledged the incident from the dashboard.
Recommendations
- Add a dedicated rate limit for the targeted route.
- Review allow-listed partner ranges quarterly.
- Keep origin IPs out of public DNS history.
Any plans to support per-tenant limits keyed on a JWT claim?
Great write-up. We saw almost the same pattern on our login endpoint last month.
We had the exact false-positive issue with CGNAT carriers. The weighting change makes sense.