Eine Regex legte Cloudflare lahm. 27 Minuten.
2.
2. Juli 2019, 13:42 UTC: Eine neue Regel für Cloudflares Web Application Firewall wird in über 180 Städten in etwa zwei Sekunden live geschaltet. Es handelt sich um eine XSS-Regel im Simulationsmodus, die also nichts blockiert, aber dennoch bei jeder Anfrage ausgeführt wird und mit .*(?:.*=.*) endet. PCRE führt Backtracking durch, jeder HTTP-Core erreicht 100 % CPU-Auslastung, und jede über Cloudflare-proxierte Website gibt 27 Minuten lang 502 zurück; der Traffic sinkt um 82 %. Der Notausschalter befindet sich hinter Cloudflare Access, das sich hinter Cloudflare befindet. Postmortem, aus Cloudflares eigenem Bericht: der Wochen zuvor in einem Refactoring zur CPU-Einsparung entfernte CPU-Schutz, das Verfahren, das jeder Regel erlaubte, die Staging-Phase zu überspringen, die Engine ohne Komplexitätsgarantie, die 11 Ursachen und die 7 Fehlerbehebungen. Urteil zur Fehlerbehebung: SHIP IT.
Die schriftliche Ausgabe lesen (Englisch) ↗
Was dieses Video behandelt
- 13:31–13:42 UTC: PR zusammengeführt, CI grün (kein CPU-Test), Quicksilver pusht die Regel in über 180 Städte; WAF-Regeln überspringen die DOG → PIG → Canary-Phasen
- 13:45–14:07: erste Seite; CPU 100 % weltweit, Traffic −82 %, 502er überall; das interne Kontrollpanel ist hinter Cloudflare Access, das ausgefallen ist; einige Anmeldeinformationen sind abgelaufen; ein selten geübtes Bypass-Verfahren
- 14:07–14:09: globale WAF-Beendigung; Traffic und CPU normal nach 27 Minuten; 14:52 WAF wieder aktiv minus der Regel
- 2. Juli (15:50 UTC) und 12. Juli: Cloudflare veröffentlicht die Notiz vom selben Tag und das vollständige Postmortem; CPU-Schutz wieder hinzugefügt, 3.868 Regeln neu gelesen, gestaffelte Rollouts, Umstellung auf eine Regex-Engine mit linearer Zeitkomplexität
Übersetztes Transkript
Aus der englischen Originalerzählung übersetzt. Verfügbare Audio- und Untertitel werden von YouTube gesteuert.
0:00 Ein einziger regulärer Ausdruck wird auf jedem Cloudflare-Server gleichzeitig live geschaltet, und für die nächsten siebenundzwanzig Minuten zeigen die dahinter liegenden Websites eine 502-Seite an, was für eine Firewall die strengste mögliche Einstellung ist. 2. Juli 2019, 13:42 UTC. Cloudflare postet innerhalb von zwei Stunden: kein Angriff, eine fehlerhafte Bereitstellung, Traffic um 82 Prozent gesunken. Zehn Tage später veröffentlicht CTO John Graham-Cumming das vollständige Postmortem, Regex inklusive, und Hacker News gibt ihm 698 Punkte,
0:26 was für einen Ausfall ein stehender Applaus ist. Wie es passiert, warum es möglich ist und wer tatsächlich die Schuld trägt. Das ist The Daily Diff, Postmortem. 13:31. Ein Pull Request wird zusammengeführt: eine neue Firewall-Regel gegen Cross-Site Scripting, im Simulationsmodus, blockiert also nichts. 13:37, Tests bestanden; keiner misst die CPU. 13:42, die Regel wird in zwei Sekunden in 180 Städte ausgeliefert, weil WAF-Regeln die Dog-, Pig- und Canary-Phasen überspringen, die andere Releases durchlaufen.
0:54 13:45, die erste Seite. 13:49, Hacker News hat einen Thread auf der Statusseite, die immer noch sagt, dass alle Systeme betriebsbereit sind. Die Regel endet mit Punkt-Stern, Punkt-Stern, Gleich, Punkt-Stern: alles, dann alles, dann ein Gleichheitszeichen. PCRE rät gierig, scheitert und geht durch jeden anderen Split zurück. x gleich x dauert 23 Schritte. Zwanzig x nach dem Gleichheitszeichen: 555.
1:15 Zwanzig x, kein Gleichheitszeichen: 4.067 Schritte, um nichts zu finden. Das bei jeder Anfrage ausführen und jeder Kern ist zu hundert Prozent ausgelastet, gründlich nichts tuend. Zwei Schutzmechanismen hätten es erkennen müssen. Das CPU-Limit für Regeln wurde Wochen zuvor versehentlich entfernt, in einem Refactoring, das die WAF weniger CPU verbrauchen lassen sollte. Und das Verfahren erlaubt jeder Regel, das Staging zu überspringen, weil Regeln existieren, um Live-Angriffe zu stoppen; dies war kein Notfall, und es wurde trotzdem global ausgerollt.
1:37 14:00, die WAF wird identifiziert; kein Angriff. 14:02, jemand schlägt die globale Beendigung vor: eine Komponente, aus, weltweit. Der Schalter ist hinter Cloudflare Access. Cloudflare Access ist hinter Cloudflare. Einige Anmeldeinformationen sind durch Nichtbenutzung abgelaufen, so dass das schnellste Netzwerk im Internet fünf Minuten für einen Bypass aufwendet, den niemand geübt hat. 14:07, Kill. 14:09, Traffic normal. git blame: ein Rollout mit einer Geschwindigkeit, global; ein CPU-Schutz, der versehentlich wegre-fakturiert wurde;
2:04 eine Regex-Engine ohne Obergrenze. Nicht der Ingenieur, der die Regel geschrieben hat: Das Postmortem listet elf Ursachen auf und nennt niemanden. Schadensausmaß: 27 Minuten, 82 Prozent des Traffics, 100 Prozent CPU auf jedem Kern, in jeder Stadt. Das Dashboard und die API befinden sich hinter derselben Edge, so dass Kunden nicht einmal es abschalten können. Hacker News, unter dem Postmortem: Sie hatten ein Problem, verwendeten einen regulären Ausdruck, jetzt haben sie zwei. Alter Witz. Kompiliert immer noch.
2:28 Urteil, Postmortem: SHIP IT. Der CPU-Schutz ist zurück, alle 3.868 Regeln werden manuell gelesen, Regeln durchlaufen das Staging, und die Engine wechselt zu einer mit linearer Zeit- Garantien, veröffentlicht von Ken Thompson im Jahr 1968. Montag: kein Punkt-Stern Punkt-Stern in irgendetwas, das pro Anfrage läuft, und halte den Notausschalter von dem fern, was er ausschaltet. Schicken Sie mir den Vorfall, über den Sie immer noch nicht sprechen dürfen, in den Kommentaren oder unter the daily diff dot dev.
2:53 Und das ist der Unterschied für heute. Ich bin Niko von Axrisi. Verantwortungsbewusst zusammenführen.
Quellen
- 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



