On Saturday 4 January 2025 at 13:20 UTC, a login endpoint flood targeted a developer platform customer in North America. The attack peaked at 725.6 million requests per second and lasted 42 minutes. Traffic originated from 2126 autonomous systems in 56 countries, predominantly mobile carrier ranges.
| Vector | login endpoint flood |
| Peak | 725.6 million requests per second |
| Duration | 42 min |
| Time to mitigation | 0.734 s |
| Attack traffic reaching origin | 0.046% |
| Legitimate traffic challenged | 0.43% |
Timeline
The attack was preceded by a ransom note demanding payment in Monero. Request rates on the targeted routes exceeded their hourly baseline by a factor of 452 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
No customer-visible impact. The on-call engineer was notified and acknowledged the incident from the dashboard.
Recommendations
- Keep origin IPs out of public DNS history.
- Add a dedicated rate limit for the targeted route.
- Review allow-listed partner ranges quarterly.
This matches what we see in iGaming around big matches.
Any plans to support per-tenant limits keyed on a JWT claim?
How does the proof-of-work challenge behave on older Android devices? Any numbers below Android 10?
Thanks — sharing this with our on-call team.
Verified good bots and allow-listed partners bypass challenges entirely.
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.
Great write-up. We saw almost the same pattern on our login endpoint last month.
Good question. We will cover that in a follow-up post.
We moved from a scrubbing provider to always-on last year; time to mitigation went from minutes to basically nothing.