On Thursday 14 August 2025 at 02:53 UTC, a TLS handshake exhaustion targeted a healthcare portal customer in the UK. The attack peaked at 894.3 million requests per second and lasted 73 minutes. Traffic originated from 878 autonomous systems in 58 countries, predominantly a rented booter service.
| Vector | TLS handshake exhaustion |
| Peak | 894.3 million requests per second |
| Duration | 73 min |
| Time to mitigation | 0.653 s |
| Attack traffic reaching origin | 0.000% |
| Legitimate traffic challenged | 0.61% |
Timeline
The attack was preceded by a hacktivist channel announcing the target. Request rates on the targeted routes exceeded their hourly baseline by a factor of 317 within 8 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 143 ms during the first minute, then normal service.
Recommendations
- Keep origin IPs out of public DNS history.
- Add a dedicated rate limit for the targeted route.
- Lower challenge thresholds on authentication endpoints during high-risk events.
Do you publish the edge IP ranges in a machine-readable format?
We had the exact false-positive issue with CGNAT carriers. The weighting change makes sense.
This matches what we see in iGaming around big matches.
Machine-readable ranges are at /ips.json and via the API.
Clear and practical, thanks.
We moved from a scrubbing provider to always-on last year; time to mitigation went from minutes to basically nothing.
Solid runbook advice. The DNS-at-2am point hit home.
Is the risk score exposed in the logs so we can build our own dashboards on it?
This matches what we see in iGaming around big matches.