On Thursday 25 August 2022 at 18:48 UTC, a TLS handshake exhaustion targeted a gaming community customer in North America. The attack peaked at 264.5 million requests per second and lasted 154 minutes. Traffic originated from 2670 autonomous systems in 16 countries, predominantly a Mirai-derived IoT botnet.
| Vector | TLS handshake exhaustion |
| Peak | 264.5 million requests per second |
| Duration | 154 min |
| Time to mitigation | 0.204 s |
| Attack traffic reaching origin | 0.010% |
| Legitimate traffic challenged | 0.44% |
Timeline
The attack was preceded by a publicly announced sales event. Request rates on the targeted routes exceeded their hourly baseline by a factor of 491 within 25 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
Checkout conversion was unchanged compared with the same hour of the previous week.
Recommendations
- Keep origin IPs out of public DNS history.
- Add a dedicated rate limit for the targeted route.
- Review allow-listed partner ranges quarterly.
We had the exact false-positive issue with CGNAT carriers. The weighting change makes sense.
Any plans to support per-tenant limits keyed on a JWT claim?
Would love a follow-up on how you handle HTTP/3 fingerprinting.
We had the exact false-positive issue with CGNAT carriers. The weighting change makes sense.
How does the proof-of-work challenge behave on older Android devices? Any numbers below Android 10?
Solid runbook advice. The DNS-at-2am point hit home.
Thanks! Yes — the risk score and its components are included in every log record.
The point about origin IPs leaking through certificate transparency logs is underrated.
Verified good bots and allow-listed partners bypass challenges entirely.
Do you publish the edge IP ranges in a machine-readable format?
Is the risk score exposed in the logs so we can build our own dashboards on it?