+− THE DAILY DIFFdev & AI news
SHIP IT

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

  1. John Graham-Cumming, "Details of the Cloudflare outage on July 2, 2019" (Jul 12, 2019)blog.cloudflare.com
  2. Matthew Prince, "Cloudflare outage caused by bad software deploy (updated)" (Jul 2, 2019)blog.cloudflare.com
  3. Matthew Prince on X, Jul 2, 2019, 14:22 UTCx.com
  4. Matthew Prince on X, Jul 2, 2019, 14:36 UTC ("No evidence yet attack related")x.com
  5. Hacker News, Jul 2, 2019, 13:49 UTC — "Cloudflare Network Performance Issues" (631 points)news.ycombinator.com
  6. Hacker News, Jul 2, 2019 — "Cloudflare outage caused by bad software deploy" (348 points)news.ycombinator.com
  7. Hacker News, Jul 12, 2019 — "Details of the Cloudflare outage on July 2, 2019" (698 points)news.ycombinator.com
  8. TechCrunch, Jul 2, 2019techcrunch.com

Vídeos relacionados