+− THE DAILY DIFFdev & AI news
SHIP IT

Una regex ha messo offline Cloudflare. 27 minuti.

2 luglio 2019, 13:42 UTC: una nuova regola per il Web Application Firewall di Cloudflare va online in oltre 180 città in circa due secondi.

2 luglio 2019, 13:42 UTC: una nuova regola per il Web Application Firewall di Cloudflare va online in oltre 180 città in circa due secondi. È una regola XSS in modalità simulazione, quindi non blocca nulla, ma viene comunque eseguita su ogni richiesta e termina con .*(?:.*=.*). Il PCRE esegue il backtracking, ogni core della CPU che serve richieste HTTP raggiunge il 100%, e ogni sito con proxy Cloudflare restituisce 502 per 27 minuti; il traffico scende dell'82%. L'interruttore di emergenza si trova dietro Cloudflare Access, che si trova dietro Cloudflare. Post-mortem, dal resoconto di Cloudflare: la protezione della CPU rimossa settimane prima in un refactoring inteso a risparmiare CPU, la procedura che permetteva a qualsiasi regola di saltare lo staging, il motore senza garanzia di complessità, le 11 cause e le 7 soluzioni. Verdetto sulla soluzione: SHIP IT.

Leggi l'edizione scritta (inglese) ↗

Contenuto di questo video

  • 13:31–13:42 UTC: PR unita, CI verde (nessun test CPU), Quicksilver spinge la regola in oltre 180 città; le regole WAF saltano le fasi DOG → PIG → Canary
  • 13:45–14:07: prima pagina; CPU al 100% in tutto il mondo, traffico −82%, 502 ovunque; il pannello di controllo interno è dietro Cloudflare Access, che è offline; alcune credenziali sono scadute; un bypass raramente testato
  • 14:07–14:09: terminazione globale del WAF; traffico e CPU normali dopo 27 minuti; 14:52 WAF di nuovo online meno la regola
  • 2 luglio (15:50 UTC) e 12 luglio: Cloudflare pubblica la nota dello stesso giorno e il post-mortem completo; protezione CPU riaggiunta, 3.868 regole rilette, rollout a fasi, passaggio a un motore regex a tempo lineare

Trascrizione tradotta

Tradotto dalla narrazione originale inglese. L'audio e i sottotitoli disponibili sono controllati da YouTube.

0:00 Un'espressione regolare va online su ogni server Cloudflare contemporaneamente, e per i successivi ventisette minuti i siti che si trovano dietro sono una pagina 502, che, per un firewall, è l'impostazione più rigida possibile. 2 luglio 2019, 13:42 UTC. Cloudflare posta entro due ore: non un attacco, un deployment errato, traffico in calo dell'82 percento. Dieci giorni dopo il CTO John Graham-Cumming pubblica il post-mortem completo, regex inclusa, e Hacker News gli dà 698 punti,

0:26 che per un'interruzione è una standing ovation. Come succede, perché è possibile e chi effettivamente viene incolpato. Questo è The Daily Diff, post-mortem. 13:31. Una pull request si unisce: una nuova regola firewall contro lo scripting cross-site, in modalità simulazione, quindi non blocca nulla. 13:37, i test passano; nessuno misura la CPU. 13:42, la regola viene spedita a 180 città in due secondi, perché le regole WAF saltano le fasi dog, pig e canary che altre release ottengono.

0:54 13:45, la prima pagina. 13:49, Hacker News ha un thread sulla pagina di stato, che dice ancora che tutti i sistemi sono operativi. La regola termina con punto-stella, punto-stella, uguale, punto-stella: qualsiasi cosa, poi qualsiasi cosa, poi un segno di uguale. PCRE indovina avidamente, fallisce e fa il backtracking attraverso ogni altra divisione. x uguale x richiede 23 passaggi. Venti x dopo l'uguale: 555.

1:15 Venti x, nessun segno di uguale: 4.067 passaggi per non trovare nulla. Esegui questo su ogni richiesta e ogni core è al cento per cento, non facendo nulla, completamente. Due guardie avrebbero dovuto rilevarlo. Il limite di CPU sulle regole era stato rimosso per errore settimane prima, in un refactoring inteso a far sì che il WAF usasse meno CPU. E la procedura permette a qualsiasi regola di saltare lo staging, perché le regole esistono per fermare gli attacchi in tempo reale; questa non era un'emergenza, ed è comunque andata a livello globale.

1:37 14:00, il WAF è identificato; nessun attacco. 14:02, qualcuno propone la terminazione globale: un componente, spento, in tutto il mondo. L'interruttore è dietro Cloudflare Access. Cloudflare Access è dietro Cloudflare. Alcune credenziali sono scadute per disuso, quindi la rete più veloce su internet passa cinque minuti su un bypass che nessuno aveva testato. 14:07, kill. 14:09, traffico normale. git blame: un rollout a una velocità, globale; una protezione CPU eliminata per

2:04 errore; un motore regex senza limite superiore. Non l'ingegnere che ha scritto la regola: il post-mortem elenca undici cause e non nomina nessuno. Raggio di esplosione: 27 minuti, 82 percento del traffico, 100 percento di CPU su ogni core, in ogni città. La dashboard e l'API si trovano dietro lo stesso edge, quindi i clienti non possono nemmeno spegnerlo. Hacker News, sotto il post-mortem: avevano un problema, hanno usato un'espressione regolare, ora ne hanno due. Vecchia battuta. Si compila ancora.

2:28 Verdetto, post-mortem: SHIP IT. La protezione CPU è tornata, tutte le 3.868 regole vengono lette a mano, le regole passano attraverso lo staging, e il motore si sposta a uno con garanzie a tempo lineare, pubblicato da Ken Thompson nel 1968. Lunedì: nessun punto-stella punto-stella in qualsiasi cosa che venga eseguita per richiesta, e tenere l'interruttore di emergenza separato dalla cosa che uccide. Inviami l'incidente di cui non ti è ancora permesso parlare, nei commenti, o a the daily diff dot dev.

2:53 E questa è la differenza per oggi. Sono Niko di Axrisi. Unire responsabilmente.

Fonti

  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

Video correlati