On Saturday 6 May 2023 at 16:05 UTC, a credential stuffing targeted a tax authority portal customer in North America. The attack peaked at 798.3 million requests per second and lasted 152 minutes. Traffic originated from 3437 autonomous systems in 9 countries, predominantly mobile carrier ranges.
| Vector | credential stuffing |
| Peak | 798.3 million requests per second |
| Duration | 152 min |
| Time to mitigation | 0.917 s |
| Attack traffic reaching origin | 0.032% |
| Legitimate traffic challenged | 0.29% |
Timeline
The attack was preceded by no stated motive. Request rates on the targeted routes exceeded their hourly baseline by a factor of 79 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
- Enable authenticated origin pulls.
- Add a dedicated rate limit for the targeted route.
- Enable log streaming to your SIEM for faster correlation.
Any plans to support per-tenant limits keyed on a JWT claim?
We moved from a scrubbing provider to always-on last year; time to mitigation went from minutes to basically nothing.
Good question. We will cover that in a follow-up post.
How do you avoid challenging uptime monitors and partners?
Any plans to support per-tenant limits keyed on a JWT claim?
Machine-readable ranges are at /ips.json and via the API.
The point about origin IPs leaking through certificate transparency logs is underrated.
Do you publish the edge IP ranges in a machine-readable format?
Would love a follow-up on how you handle HTTP/3 fingerprinting.
Any plans to support per-tenant limits keyed on a JWT claim?
How do you avoid challenging uptime monitors and partners?