On Sunday 4 May 2025 at 22:03 UTC, a cache-busting query flood targeted a crypto exchange customer in the Nordics. The attack peaked at 480.3 million requests per second and lasted 14 minutes. Traffic originated from 56 autonomous systems in 48 countries, predominantly a Mirai-derived IoT botnet.
| Vector | cache-busting query flood |
| Peak | 480.3 million requests per second |
| Duration | 14 min |
| Time to mitigation | 0.569 s |
| Attack traffic reaching origin | 0.011% |
| Legitimate traffic challenged | 0.75% |
Timeline
The attack was preceded by an extortion email received two days earlier. Request rates on the targeted routes exceeded their hourly baseline by a factor of 175 within 36 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.
- Enable authenticated origin pulls.
- Lower challenge thresholds on authentication endpoints during high-risk events.
Great write-up. We saw almost the same pattern on our login endpoint last month.
Nice to read a vendor blog that admits what went wrong.
How do you avoid challenging uptime monitors and partners?
We moved from a scrubbing provider to always-on last year; time to mitigation went from minutes to basically nothing.
Interesting that most attacks are under ten minutes. Our experience is similar.
Machine-readable ranges are at /ips.json and via the API.
Clear and practical, thanks.