On Saturday 29 March 2025 at 10:47 UTC, a HTTP GET flood targeted a fashion retail customer in the Benelux. The attack peaked at 214.0 million requests per second and lasted 58 minutes. Traffic originated from 669 autonomous systems in 52 countries, predominantly compromised cloud VMs.
| Vector | HTTP GET flood |
| Peak | 214.0 million requests per second |
| Duration | 58 min |
| Time to mitigation | 0.710 s |
| Attack traffic reaching origin | 0.064% |
| Legitimate traffic challenged | 0.71% |
Timeline
The attack was preceded by no stated motive. Request rates on the targeted routes exceeded their hourly baseline by a factor of 262 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
A brief increase in p99 latency of 121 ms during the first minute, then normal service.
Recommendations
- Add a dedicated rate limit for the targeted route.
- Keep origin IPs out of public DNS history.
- Review allow-listed partner ranges quarterly.
Is the risk score exposed in the logs so we can build our own dashboards on it?
We had the exact false-positive issue with CGNAT carriers. The weighting change makes sense.
Thanks! Yes — the risk score and its components are included in every log record.
Would love a follow-up on how you handle HTTP/3 fingerprinting.
We had the exact false-positive issue with CGNAT carriers. The weighting change makes sense.