On Sunday 15 January 2023 at 20:23 UTC, a HTTP GET flood targeted a video streaming customer in the UK. The attack peaked at 938.9 million requests per second and lasted 126 minutes. Traffic originated from 243 autonomous systems in 35 countries, predominantly mobile carrier ranges.
| Vector | HTTP GET flood |
| Peak | 938.9 million requests per second |
| Duration | 126 min |
| Time to mitigation | 0.823 s |
| Attack traffic reaching origin | 0.053% |
| Legitimate traffic challenged | 0.79% |
Timeline
The attack was preceded by no stated motive. Request rates on the targeted routes exceeded their hourly baseline by a factor of 617 within 15 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
- Keep origin IPs out of public DNS history.
- Lower challenge thresholds on authentication endpoints during high-risk events.
- Enable authenticated origin pulls.
Solid runbook advice. The DNS-at-2am point hit home.
Good question. We will cover that in a follow-up post.
How does the proof-of-work challenge behave on older Android devices? Any numbers below Android 10?
Thanks — sharing this with our on-call team.
Machine-readable ranges are at /ips.json and via the API.
How do you avoid challenging uptime monitors and partners?
Interesting that most attacks are under ten minutes. Our experience is similar.