En regex tok ned Cloudflare. 27 minutter.
2.
2. juli 2019, 13:42 UTC: en ny regel for Cloudflares Web Application Firewall går live i over 180 byer på omtrent to sekunder. Det er en XSS-regel i simulert modus, så den blokkerer ingenting, men den kjører fortsatt på hver forespørsel, og den slutter på .*(?:.*=.*). PCRE backtrack, hver CPU-kjerne som betjener HTTP treffer 100 %, og alle Cloudflare-proxyede nettsteder returnerer 502 i 27 minutter; trafikken faller 82 %. Nødstoppen sitter bak Cloudflare Access, som sitter bak Cloudflare. Postmortem, fra Cloudflares egen redegjørelse: CPU-vakten fjernet uker tidligere i en refaktor ment å spare CPU, prosedyren som lot enhver regel hoppe over staging, motoren uten kompleksitetsgaranti, de 11 årsakene og de 7 løsningene. Dom over løsningen: SHIP IT.
Les den skriftlige utgaven (engelsk) ↗
Hva denne videoen dekker
- 13:31–13:42 UTC: PR slått sammen, CI grønn (ingen CPU-test), Quicksilver presser regelen til over 180 byer; WAF-regler hopper over DOG → PIG → Canary-stadiene
- 13:45–14:07: første side; CPU 100 % globalt, trafikk −82 %, 502s overalt; det interne kontrollpanelet er bak Cloudflare Access, som er nede; noen legitimasjoner har utløpt; en sjelden øvd omgåelse
- 14:07–14:09: global WAF-terminering; trafikk og CPU normal etter 27 minutter; 14:52 WAF tilbake minus regelen
- 2. jul (15:50 UTC) og 12. jul: Cloudflare publiserer samme-dagsnotatet og full postmortem; CPU-vakt lagt til igjen, 3 868 regler lest på nytt, staged rollouts, overgang til en lineær-tid regex-motor
Oversatt transkripsjon
Oversatt fra den originale engelske fortellingen. Tilgjengelig lyd og undertekster kontrolleres av YouTube.
0:00 Ett regulært uttrykk går live på hver Cloudflare-server samtidig, og de neste tjuesju minuttene er nettstedene bak den en 502-side, som, for en brannmur, er den strengeste mulige innstillingen. 2. juli 2019, 13:42 UTC. Cloudflare poster innen to timer: ikke et angrep, en dårlig utrulling, trafikken ned 82 prosent. Ti dager senere publiserer CTO John Graham-Cumming den fulle postmortem, regex inkludert, og Hacker News gir den 698 poeng,
0:26 som for et brudd er en stående applaus. Hvordan det skjer, hvorfor det er mulig, og hvem som faktisk får skylden. Dette er The Daily Diff, postmortem. 13:31. En pull-forespørsel slås sammen: en ny brannmurregel mot cross-site scripting, i simulert modus, så den blokkerer ingenting. 13:37, tester passerer; ingen måler CPU. 13:42, regelen sendes til 180 byer på to sekunder, fordi WAF-regler hopper over hund-, gris- og kanarifugl-stadiene andre utgivelser får.
0:54 13:45, den første siden. 13:49, Hacker News har en tråd om status-siden, som fortsatt sier alle systemer er i drift. Regelen slutter på stjerne, punktum, stjerne, punktum, lik, stjerne: hva som helst, deretter hva som helst, deretter et likhetstegn. PCRE gjetter grådig, feiler og tilbakesporer gjennom alle andre delinger. x lik x tar 23 trinn. Tjue x-er etter likhetstegnet: 555.
1:15 Tjue x-er, ingen likhetstegn: 4 067 trinn for å finne ingenting. Kjør det på hver forespørsel og hver kjerne er på hundre prosent, gjør ingenting, grundig. To vakter burde ha fanget det. CPU-grensen på regler ble fjernet ved en feil uker tidligere, i en refaktor ment å få WAF til å bruke mindre CPU. Og prosedyren lar enhver regel hoppe over staging, fordi regler eksisterer for å stoppe levende angrep; denne var ikke en nødsituasjon, og den gikk global likevel.
1:37 14:00, WAF er identifisert; ingen angrep. 14:02, noen foreslår den globale termineringen: én komponent, av, over hele verden. Bryteren er bak Cloudflare Access. Cloudflare Access er bak Cloudflare. Noen legitimasjoner har utløpt fra ufornuft, så det raskeste nettverket på internett bruker fem minutter på en omgåelse ingen trente på. 14:07, stopp. 14:09, trafikk normal. git blame: en utrulling med én hastighet, global; en CPU-vakt refaktorert bort ved
2:04 ulykke; en regex-motor uten øvre grense. Ikke ingeniøren som skrev regelen: postmortem lister elleve årsaker og nevner ingen. Skadestadius: 27 minutter, 82 prosent av trafikken, 100 prosent CPU på hver kjerne, i hver by. Dashboardet og API-et sitter bak samme kant, så kundene kan ikke engang slå det av. Hacker News, under postmortem: de hadde ett problem, brukte et regulært uttrykk, nå har de to. Gammel vits. Kompilerer fortsatt.
2:28 Dom, postmortem: SHIP IT. CPU-vakten er tilbake, alle 3 868 regler leses for hånd, regler går gjennom staging, og motoren flyttes til en med lineær-tid garantier, publisert av Ken Thompson i 1968. Mandag: ingen prikk-stjerne prikk-stjerne i noe som kjører per forespørsel, og hold nødstoppbryteren unna det den dreper. Send meg hendelsen du fortsatt ikke får snakke om, i kommentarene, eller på the daily diff dot dev.
2:53 Og det er diffen for i dag. Jeg er Niko fra Axrisi. Slå sammen ansvarlig.
Kilder
- John Graham-Cumming, "Details of the Cloudflare outage on July 2, 2019" (Jul 12, 2019)blog.cloudflare.com
- Matthew Prince, "Cloudflare outage caused by bad software deploy (updated)" (Jul 2, 2019)blog.cloudflare.com
- Matthew Prince on X, Jul 2, 2019, 14:22 UTCx.com
- Matthew Prince on X, Jul 2, 2019, 14:36 UTC ("No evidence yet attack related")x.com
- Hacker News, Jul 2, 2019, 13:49 UTC — "Cloudflare Network Performance Issues" (631 points)news.ycombinator.com
- Hacker News, Jul 2, 2019 — "Cloudflare outage caused by bad software deploy" (348 points)news.ycombinator.com
- Hacker News, Jul 12, 2019 — "Details of the Cloudflare outage on July 2, 2019" (698 points)news.ycombinator.com
- TechCrunch, Jul 2, 2019techcrunch.com



