On Friday 3 December 2021 at 19:18 UTC, a TLS handshake exhaustion targeted a fashion retail customer in North America. The attack peaked at 957.5 million requests per second and lasted 90 minutes. Traffic originated from 1794 autonomous systems in 48 countries, predominantly a headless-browser farm.
| Vector | TLS handshake exhaustion |
| Peak | 957.5 million requests per second |
| Duration | 90 min |
| Time to mitigation | 0.315 s |
| Attack traffic reaching origin | 0.050% |
| Legitimate traffic challenged | 0.44% |
Timeline
The attack was preceded by no stated motive. Request rates on the targeted routes exceeded their hourly baseline by a factor of 849 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
A brief increase in p99 latency of 98 ms during the first minute, then normal service.
Recommendations
- Enable authenticated origin pulls.
- Add a dedicated rate limit for the targeted route.
- Keep origin IPs out of public DNS history.
The point about origin IPs leaking through certificate transparency logs is underrated.
The point about origin IPs leaking through certificate transparency logs is underrated.
How do you avoid challenging uptime monitors and partners?
Machine-readable ranges are at /ips.json and via the API.
How do you avoid challenging uptime monitors and partners?
Great write-up. We saw almost the same pattern on our login endpoint last month.