Unha regex derrubou Cloudflare. 27 minutos.
2 de xullo de 2019, 13:42 UTC: unha nova regra para o Firewall de Aplicacións Web de Cloudflare entra en funcionamento en máis de 180 cidades en aproximadamente dous segundos.
2 de xullo de 2019, 13:42 UTC: unha nova regra para o Firewall de Aplicacións Web de Cloudflare entra en funcionamento en máis de 180 cidades en aproximadamente dous segundos. É unha regra XSS en modo de simulación, polo que non bloquea nada, pero aínda se executa en cada solicitude e remata en .*(?:.*=.*). PCRE "backtracks", cada núcleo de CPU que serve HTTP chega ao 100 %, e cada sitio "proxied" por Cloudflare devolve 502 durante 27 minutos; o tráfico cae un 82 %. O "kill switch" atópase detrás de Cloudflare Access, que á súa vez está detrás de Cloudflare. Postmortem, do propio informe de Cloudflare: a protección da CPU eliminouse semanas antes nunha refactorización destinada a aforrar CPU, o procedemento que permitía a calquera regra saltar a fase de posta en marcha, o motor sen garantía de complexidade, as 11 causas e as 7 solucións. Veredito da solución: SHIP IT.
Ler a edición escrita (inglés) ↗
Que abrangue este vídeo
- 13:31–13:42 UTC: PR fusionado, CI en verde (sen proba de CPU), Quicksilver envía a regra a máis de 180 cidades; as regras WAF saltan as fases DOG → PIG → Canary
- 13:45–14:07: primeira páxina; CPU ao 100 % en todo o mundo, tráfico -82 %, 502 por todas partes; o panel de control interno está detrás de Cloudflare Access, que está caído; algunhas credenciais caducaron; un "bypass" raramente practicado
- 14:07–14:09: terminación global do WAF; tráfico e CPU normais despois de 27 minutos; 14:52 WAF de novo menos a regra
- 2 de xullo (15:50 UTC) e 12 de xullo: Cloudflare publica a nota do mesmo día e o "postmortem" completo; volveuse a engadir a protección da CPU, volvéronse a ler 3.868 regras, despregamentos por fases, paso a un motor de expresións regulares de tempo lineal
Transcrición traducida
Traducido da narración orixinal en inglés. O audio e os subtítulos dispoñibles son controlados por YouTube.
0:00 Unha expresión regular entra en funcionamento en cada servidor de Cloudflare á vez, e durante os seguintes vinte e sete minutos os sitios detrás dela son unha páxina 502, o que, para un "firewall", é a configuración máis estrita posible. 2 de xullo de 2019, 13:42 UTC. Cloudflare publica en menos de dúas horas: non é un ataque, un despregamento defectuoso, tráfico caído un 82 por cento. Dez días despois, o CTO John Graham-Cumming publica o "postmortem" completo, expresión regular incluída, e Hacker News dálle 698 puntos,
0:26 o que para unha interrupción é unha ovación de pé. Como ocorre, por que é posible e quen realmente ten a culpa. Isto é The Daily Diff, "postmortem". 13:31. Unha solicitude de extracción fusiónase: unha nova regra de "firewall" contra "cross-site" scripting, en modo de simulación, polo que non bloquea nada. 13:37, as probas pasan; ningunha mide a CPU. 13:42, a regra envíase a 180 cidades en dous segundos, porque as regras WAF saltan as etapas de can, porco e canario que obteñen outras versións.
0:54 13:45, a primeira páxina. 13:49, Hacker News ten un fío sobre a páxina de estado, que aínda di que todos os sistemas están operativos. A regra remata en punto-asterisco, punto-asterisco, igual, punto-asterisco: calquera cousa, logo calquera cousa, logo un signo igual. PCRE adiviña avariciosamente, falla e retrocede a través de cada outra división. x igual a x leva 23 pasos. Vinte x despois do igual: 555.
1:15 Vinte x, sen signo igual: 4.067 pasos para non atopar nada. Executa iso en cada solicitude e cada núcleo estará ao cento por cento, sen facer nada, a fondo. Dous gardas deberían telo detectado. O límite de CPU nas regras eliminouse por erro semanas antes, nunha refactorización destinada a que o WAF usase menos CPU. E o procedemento permite que calquera regra salte a fase de posta en marcha, porque as regras existen para deter ataques en vivo; esta non era unha emerxencia, e aínda así fíxose global.
1:37 14:00, identifícase o WAF; non hai ataque. 14:02, alguén propón a terminación global: un compoñente, desactivado, en todo o mundo. O interruptor está detrás de Cloudflare Access. Cloudflare Access está detrás de Cloudflare. Algunhas credenciais caducaron por desuso, polo que a rede máis rápida do internet pasa cinco minutos nun "bypass" que ninguén practicou. 14:07, "kill". 14:09, tráfico normal. git blame: un despregamento cunha velocidade, global; unha protección de CPU refactorizada por
2:04 accidente; un motor de expresións regulares sen límite superior. Non o enxeñeiro que escribiu a regra: o "postmortem" enumera once causas e non nomea a ninguén. Radio de explosión: 27 minutos, 82 por cento do tráfico, 100 por cento de CPU en cada núcleo, en cada cidade. O panel de control e a API atópanse detrás da mesma "edge", polo que os clientes nin sequera poden desactivalo. Hacker News, baixo o "postmortem": tiñan un problema, usaron unha expresión regular, agora teñen dous. Vello chiste. Aínda compila.
2:28 Veredito, "postmortem": SHIP IT. A protección da CPU volveu, as 3.868 regras son lidas a man, as regras pasan por fases de posta en marcha, e o motor pasa a un con garantías de tempo lineal, publicado por Ken Thompson en 1968. Luns: sen punto-asterisco punto-asterisco en nada que se execute por solicitude, e manter o "kill switch" fóra do que mata. Envía o incidente do que aínda non tes permitido falar, nos comentarios, ou en "thedailydiff.dev".
2:53 E esa é a diferenza de hoxe. Son Niko de Axrisi. Fusiona con responsabilidade.
Fontes
- 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



