On Friday 3 May 2024 at 11:21 UTC, a cache-busting query flood targeted a municipal services customer in the Benelux. The attack peaked at 927.7 million requests per second and lasted 9 minutes. Traffic originated from 315 autonomous systems in 37 countries, predominantly a headless-browser farm.
| Vector | cache-busting query flood |
| Peak | 927.7 million requests per second |
| Duration | 9 min |
| Time to mitigation | 0.016 s |
| Attack traffic reaching origin | 0.048% |
| Legitimate traffic challenged | 0.49% |
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 761 within 22 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
Checkout conversion was unchanged compared with the same hour of the previous week.
Recommendations
- Add a dedicated rate limit for the targeted route.
- Enable authenticated origin pulls.
- Lower challenge thresholds on authentication endpoints during high-risk events.
Is the risk score exposed in the logs so we can build our own dashboards on it?
Thanks! Yes — the risk score and its components are included in every log record.
Nice to read a vendor blog that admits what went wrong.
Thanks — sharing this with our on-call team.
Verified good bots and allow-listed partners bypass challenges entirely.
Our auditors asked for exactly this kind of incident evidence under DORA.
Carpet bombing is nasty. Good to see a clear explanation of it.
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?
Thanks! Yes — the risk score and its components are included in every log record.
We moved from a scrubbing provider to always-on last year; time to mitigation went from minutes to basically nothing.
This matches what we see in iGaming around big matches.