On Sunday 1 June 2025 at 21:25 UTC, a cache-busting query flood targeted a B2B SaaS customer in the Nordics. The attack peaked at 679.9 million requests per second and lasted 119 minutes. Traffic originated from 3907 autonomous systems in 45 countries, predominantly mobile carrier ranges.
| Vector | cache-busting query flood |
| Peak | 679.9 million requests per second |
| Duration | 119 min |
| Time to mitigation | 0.819 s |
| Attack traffic reaching origin | 0.082% |
| Legitimate traffic challenged | 0.21% |
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 418 within 9 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
- Keep origin IPs out of public DNS history.
- Enable authenticated origin pulls.
- Add a dedicated rate limit for the targeted route.
Would love a follow-up on how you handle HTTP/3 fingerprinting.
The billing model is what got our finance team on board, honestly.
Interesting that most attacks are under ten minutes. Our experience is similar.
How does the proof-of-work challenge behave on older Android devices? Any numbers below Android 10?
Good question. We will cover that in a follow-up post.
The billing model is what got our finance team on board, honestly.