On Friday 26 April 2024 at 10:55 UTC, a TLS handshake exhaustion targeted a sports betting customer in the UK. The attack peaked at 105.9 million requests per second and lasted 131 minutes. Traffic originated from 3242 autonomous systems in 11 countries, predominantly hijacked home routers.
| Vector | TLS handshake exhaustion |
| Peak | 105.9 million requests per second |
| Duration | 131 min |
| Time to mitigation | 0.404 s |
| Attack traffic reaching origin | 0.038% |
| Legitimate traffic challenged | 0.22% |
Timeline
The attack was preceded by a competitor’s product launch. Request rates on the targeted routes exceeded their hourly baseline by a factor of 865 within 18 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
- Review allow-listed partner ranges quarterly.
- Add a dedicated rate limit for the targeted route.
- Enable log streaming to your SIEM for faster correlation.
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?
Great write-up. We saw almost the same pattern on our login endpoint last month.
Solid runbook advice. The DNS-at-2am point hit home.
Great write-up. We saw almost the same pattern on our login endpoint last month.
How do you avoid challenging uptime monitors and partners?
Machine-readable ranges are at /ips.json and via the API.
The billing model is what got our finance team on board, honestly.
This matches what we see in iGaming around big matches.