How an AI-orchestrated botnet pushed a 10-year hobby speech synthesis service from $10/month to a $6,750/month WAF billing crisis — and how 5-layer edge defense defeated it for $20/month flat.
Incident Postmortem & Cloud Security Case Study · 2026
run.app) with no CDN or Edge WAF and uncapped pay-per-use scaling.text, pitch, and speed query parameters on every call.max-instances=1 + App Rate Limit): Caps runaway Cloud bill immediately, but starves legitimate users (504 Gateway Timeout) as bots fill the queue.200) vs. blocked (403/429) responses to infer WAF rules.run.app direct URL (ingress = internal-and-cloud-load-balancing).CN)
Initial Cloud Armor telemetry showed almost the entire cache-busting TTS flood originating from Chinese IP ranges.CN Region
Deployed an edge geo-filter in Cloud Armor to drop all requests from China (403 Forbidden).CN, the flood resumed at full volume from surrounding Asian countries.KR), Taiwan (TW), Vietnam (VN), Singapore (SG), Indonesia (ID), Philippines (PH), and India (IN).US, BR, DE, GB, TR, ZA, and AU.JP)
Inverted our WAF policy to block the entire world outside Japan—buying just 4 hours.X-Client-Signature on /synthesize calls.403 Forbidden).seed with a short TTL via GET /challenge.nonce where SHA256(seed + nonce) starts with 0000... (~65k hashes).1 hash), while 1,000 RPS costs the botnet 65M+ hashes/sec.POST /synthesize.POST /synthesize)
SHA-256 PoW made unauthorized TTS generation computationally infeasible.GET /challenge & /)
Botnet pivoted to unauthenticated endpoints that require zero PoW.Chrome/134), but its proxy software spoke HTTP/1.1 (real browsers always negotiate HTTP/2 or HTTP/3!).6–8 req/10s (just below 10 req/10s).