On Saturday 20 September 2025 at 05:27 UTC, a credential stuffing targeted a ticketing customer in North America. The attack peaked at 423.1 million requests per second and lasted 121 minutes. Traffic originated from 2918 autonomous systems in 99 countries, predominantly mobile carrier ranges.
| Vector | credential stuffing |
| Peak | 423.1 million requests per second |
| Duration | 121 min |
| Time to mitigation | 0.939 s |
| Attack traffic reaching origin | 0.090% |
| Legitimate traffic challenged | 0.12% |
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 111 within 16 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
No customer-visible impact. The on-call engineer was notified and acknowledged the incident from the dashboard.
Recommendations
- Review allow-listed partner ranges quarterly.
- Lower challenge thresholds on authentication endpoints during high-risk events.
- Add a dedicated rate limit for the targeted route.
Solid runbook advice. The DNS-at-2am point hit home.
How does the proof-of-work challenge behave on older Android devices? Any numbers below Android 10?
Do you publish the edge IP ranges in a machine-readable format?
Solid runbook advice. The DNS-at-2am point hit home.
Thanks — sharing this with our on-call team.
We had the exact false-positive issue with CGNAT carriers. The weighting change makes sense.
We had the exact false-positive issue with CGNAT carriers. The weighting change makes sense.
Machine-readable ranges are at /ips.json and via the API.