On Saturday 26 April 2025 at 18:23 UTC, a HTTP GET flood targeted a retail banking customer in North America. The attack peaked at 84.6 million requests per second and lasted 108 minutes. Traffic originated from 1333 autonomous systems in 113 countries, predominantly compromised cloud VMs.
| Vector | HTTP GET flood |
| Peak | 84.6 million requests per second |
| Duration | 108 min |
| Time to mitigation | 0.717 s |
| Attack traffic reaching origin | 0.090% |
| Legitimate traffic challenged | 0.24% |
Timeline
The attack was preceded by an extortion email received two days earlier. Request rates on the targeted routes exceeded their hourly baseline by a factor of 375 within 15 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
- Keep origin IPs out of public DNS history.
- Lower challenge thresholds on authentication endpoints during high-risk events.
- Review allow-listed partner ranges quarterly.
Thanks — sharing this with our on-call team.
Verified good bots and allow-listed partners bypass challenges entirely.
Our auditors asked for exactly this kind of incident evidence under DORA.
We had the exact false-positive issue with CGNAT carriers. The weighting change makes sense.
Great write-up. We saw almost the same pattern on our login endpoint last month.
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?
Good question. We will cover that in a follow-up post.
Clear and practical, thanks.
The billing model is what got our finance team on board, honestly.