On Friday 27 May 2022 at 04:48 UTC, a HTTP GET flood targeted a crypto exchange customer in Western Europe. The attack peaked at 428.1 million requests per second and lasted 69 minutes. Traffic originated from 3473 autonomous systems in 104 countries, predominantly a headless-browser farm.
| Vector | HTTP GET flood |
| Peak | 428.1 million requests per second |
| Duration | 69 min |
| Time to mitigation | 0.144 s |
| Attack traffic reaching origin | 0.026% |
| Legitimate traffic challenged | 0.78% |
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 90 within 33 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
- Add a dedicated rate limit for the targeted route.
- Enable authenticated origin pulls.
- Enable log streaming to your SIEM for faster correlation.
Our auditors asked for exactly this kind of incident evidence under DORA.
Verified good bots and allow-listed partners bypass challenges entirely.
Solid runbook advice. The DNS-at-2am point hit home.
Nice to read a vendor blog that admits what went wrong.
Any plans to support per-tenant limits keyed on a JWT claim?
We had the exact false-positive issue with CGNAT carriers. The weighting change makes sense.
Good question. We will cover that in a follow-up post.
How do you avoid challenging uptime monitors and partners?
Thanks — sharing this with our on-call team.
Thanks — sharing this with our on-call team.
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.