On Tuesday 23 August 2022 at 08:46 UTC, a WebSocket connection flood targeted a tax authority portal customer in Western Europe. The attack peaked at 843.5 million requests per second and lasted 55 minutes. Traffic originated from 3687 autonomous systems in 71 countries, predominantly a headless-browser farm.
| Vector | WebSocket connection flood |
| Peak | 843.5 million requests per second |
| Duration | 55 min |
| Time to mitigation | 0.223 s |
| Attack traffic reaching origin | 0.002% |
| Legitimate traffic challenged | 0.23% |
Timeline
The attack was preceded by a ransom note demanding payment in Monero. Request rates on the targeted routes exceeded their hourly baseline by a factor of 62 within 8 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
- Enable log streaming to your SIEM for faster correlation.
- Review allow-listed partner ranges quarterly.
- Add a dedicated rate limit for the targeted route.
Carpet bombing is nasty. Good to see a clear explanation of it.
Could you share the dataset behind the percentages?
Do you publish the edge IP ranges in a machine-readable format?
Nice to read a vendor blog that admits what went wrong.
Would love a follow-up on how you handle HTTP/3 fingerprinting.
How does the proof-of-work challenge behave on older Android devices? Any numbers below Android 10?
We moved from a scrubbing provider to always-on last year; time to mitigation went from minutes to basically nothing.
Any plans to support per-tenant limits keyed on a JWT claim?
Thanks! Yes — the risk score and its components are included in every log record.