Una expressió regular va tombar Cloudflare. 27 minuts.
2 de juliol de 2019, 13:42 UTC: una nova regla per al Web Application Firewall de Cloudflare es posa en marxa en més de 180 ciutats en uns dos segons.
2 de juliol de 2019, 13:42 UTC: una nova regla per al Web Application Firewall de Cloudflare es posa en marxa en més de 180 ciutats en uns dos segons. És una regla XSS en mode de simulació, de manera que no bloqueja res, però encara s'executa en cada sol·licitud i acaba en .*(?:.*=.*). PCRE fa retrocessos, cada nucli de CPU que atén HTTP arriba al 100 %, i cada lloc amb proxy de Cloudflare retorna 502 durant 27 minuts; el trànsit cau un 82 %. L'interruptor d'emergència es troba darrere de Cloudflare Access, que al seu torn es troba darrere de Cloudflare. Postmortem, de l'escrit de Cloudflare: el guardià de la CPU eliminat setmanes abans en una refactorització destinada a estalviar CPU, el procediment que permetia a qualsevol regla saltar-se la fase de preparació, el motor sense garantia de complexitat, les 11 causes i les 7 solucions. Veredicte sobre la solució: SHIP IT.
Llegeix l'edició escrita (anglès) ↗
Què cobreix aquest vídeo
- 13:31–13:42 UTC: PR fusionat, CI verd (sense prova de CPU), Quicksilver envia la regla a més de 180 ciutats; les regles de WAF salten les etapes DOG → PIG → Canary
- 13:45–14:07: primera pàgina; CPU 100 % a tot el món, trànsit −82 %, 502s a tot arreu; el panell de control intern està darrere de Cloudflare Access, que està caigut; algunes credencials han caducat; un bypass rarament practicat
- 14:07–14:09: terminació global de WAF; trànsit i CPU normals després de 27 minuts; 14:52 WAF de nou menys la regla
- 2 de juliol (15:50 UTC) i 12 de juliol: Cloudflare publica la nota del mateix dia i el postmortem complet; guardià de CPU re-afegit, 3.868 regles re-llegides, desplegaments per fases, pas a un motor d'expressions regulars de temps lineal
Transcripció traduïda
Traduït de la narració original en anglès. L'àudio i els subtítols disponibles estan controlats per YouTube.
0:00 Una expressió regular es posa en marxa en tots els servidors de Cloudflare alhora, i durant els següents vint-i-set minuts els llocs que hi ha al darrere són una pàgina 502, la qual cosa, per a un tallafoc, és la configuració més estricta possible. 2 de juliol de 2019, 13:42 UTC. Cloudflare publica en dues hores: no és un atac, un mal desplegament, trànsit caigut un 82 per cent. Deu dies després, el CTO John Graham-Cumming publica el postmortem complet, expressió regular inclosa, i Hacker News li dóna 698 punts,
0:26 la qual cosa per a una interrupció és una ovació dempeus. Com passa, per què és possible i qui realment en té la culpa. Això és The Daily Diff, postmortem. 13:31. Una pull request es fusiona: una nova regla de tallafoc contra scripting entre llocs, en mode de simulació, de manera que no bloqueja res. 13:37, les proves passen; cap mesura la CPU. 13:42, la regla s'envia a 180 ciutats en dos segons, perquè les regles de WAF salten les etapes de gos, porc i canari que reben altres llançaments.
0:54 13:45, la primera pàgina. 13:49, Hacker News té un fil sobre la pàgina d'estat, que encara diu tots els sistemes operatius. La regla acaba en punt-estrella, punt-estrella, igual, punt-estrella: qualsevol cosa, després qualsevol cosa, després un signe d'igual. PCRE endevina amb cobdícia, falla i fa retrocessos a través de totes les altres divisions. x igual a x pren 23 passos. Vint x's després de l'igual: 555.
1:15 Vint x's, sense signe d'igual: 4.067 passos per no trobar res. Executa això en cada sol·licitud i cada nucli està al cent per cent, fent res, a fons. Dos guardians ho haurien d'haver detectat. El límit de CPU a les regles es va eliminar per error setmanes abans, en una refactorització destinada a fer que el WAF utilitzés menys CPU. I el procediment permet que qualsevol regla salti la fase de preparació, perquè les regles existeixen per aturar els atacs en directe; aquesta no era una emergència, i tot i així es va fer global.
1:37 14:00, el WAF s'identifica; no hi ha atac. 14:02, algú proposa la terminació global: un component, apagat, a tot el món. L'interruptor està darrere de Cloudflare Access. Cloudflare Access està darrere de Cloudflare. Algunes credencials han caducat per manca d'ús, així que la xarxa més ràpida a la internet passa cinc minuts en un bypass que ningú havia practicat. 14:07, tall. 14:09, trànsit normal. git blame: un desplegament amb una velocitat, global; un guardià de CPU refactoritzat per
2:04 accident; un motor d'expressions regulars sense límit superior. No l'enginyer que va escriure la regla: el postmortem enumera onze causes i no nomena ningú. Radi de ràfega: 27 minuts, 82 per cent del trànsit, 100 per cent de CPU en cada nucli, a cada ciutat. El tauler de control i l'API es troben darrere de la mateixa vora, de manera que els clients ni tan sols poden apagar-lo. Hacker News, sota el postmortem: tenien un problema, van utilitzar una expressió regular, ara en tenen dos. Vella broma. Encara compila.
2:28 Veredicte, postmortem: SHIP IT. El guardià de la CPU ha tornat, les 3.868 regles es llegeixen a mà, les regles passen per la fase de preparació, i el motor passa a un amb garanties de temps lineal, publicat per Ken Thompson el 1968. Dilluns: res de punt-estrella punt-estrella en qualsevol cosa que s'executi per sol·licitud, i mantingueu l'interruptor d'emergència lluny de la cosa que mata. Envieu-me l'incident del qual encara no se us permet parlar, als comentaris, o a daily diff dot dev.
2:53 I aquesta és la diferència d'avui. Sóc Niko d'Axrisi. Fusioneu amb responsabilitat.
Fonts
- 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



