On Wednesday 3 August 2022 at 00:19 UTC, a search endpoint flood targeted a ticketing customer in Southeast Asia. The attack peaked at 902.7 million requests per second and lasted 39 minutes. Traffic originated from 764 autonomous systems in 42 countries, predominantly a rented booter service.
| Vector | search endpoint flood |
| Peak | 902.7 million requests per second |
| Duration | 39 min |
| Time to mitigation | 0.132 s |
| Attack traffic reaching origin | 0.030% |
| Legitimate traffic challenged | 0.05% |
Timeline
The attack was preceded by an extortion email received two days earlier. Request rates on the targeted routes exceeded their hourly baseline by a factor of 583 within 16 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
No customer-visible impact. The on-call engineer was notified and acknowledged the incident from the dashboard.
Recommendations
- Enable authenticated origin pulls.
- Review allow-listed partner ranges quarterly.
- Add a dedicated rate limit for the targeted route.
How does the proof-of-work challenge behave on older Android devices? Any numbers below Android 10?
Machine-readable ranges are at /ips.json and via the API.
Thanks — sharing this with our on-call team.
Any plans to support per-tenant limits keyed on a JWT claim?
Solid runbook advice. The DNS-at-2am point hit home.
Good question. We will cover that in a follow-up post.
Carpet bombing is nasty. Good to see a clear explanation of it.
How do you avoid challenging uptime monitors and partners?
Is the risk score exposed in the logs so we can build our own dashboards on it?