# Μια regex κατέβασε το Cloudflare. 27 λεπτά.

Published: 2026-09-12

2 Ιουλίου 2019, 13:42 UTC: ένας νέος κανόνας για το Τείχος Προστασίας Εφαρμογών Ιστού του Cloudflare τίθεται σε λειτουργία σε 180+ πόλεις σε περίπου δύο δευτερόλεπτα. Είναι ένας κανόνας XSS σε λειτουργία προσομοίωσης, οπότε δεν μπλοκάρει τίποτα, αλλά εξακολουθεί να εκτελείται σε κάθε αίτημα και καταλήγει σε .\*(?:.\*=.\*). Η PCRE κάνει backtracks, κάθε πυρήνας CPU που εξυπηρετεί HTTP φτάνει στο 100%, και κάθε ιστότοπος που έχει proxy από το Cloudflare επιστρέφει 502 για 27 λεπτά· η κίνηση πέφτει 82%. Ο διακόπτης απενεργοποίησης βρίσκεται πίσω από το Cloudflare Access, το οποίο βρίσκεται πίσω από το Cloudflare. Μετά τον θάνατο, από το ίδιο το κείμενο του Cloudflare: ο φρουρός CPU αφαιρέθηκε εβδομάδες νωρίτερα σε μια αναδιαμόρφωση που είχε σκοπό να εξοικονομήσει CPU, η διαδικασία που επέτρεπε σε οποιονδήποτε κανόνα να παρακάμψει το staging, η μηχανή χωρίς εγγύηση πολυπλοκότητας, οι 11 αιτίες και οι 7 διορθώσεις. Ετυμηγορία για τη διόρθωση: SHIP IT.

Canonical: https://thedailydiff.dev/el/video/2026-09-12-cloudflare-regex/

## Τι καλύπτει αυτό το βίντεο

- 13:31–13:42 UTC: Το PR συγχωνεύτηκε, CI πράσινο (χωρίς δοκιμή CPU), το Quicksilver προωθεί τον κανόνα σε 180+ πόλεις· οι κανόνες WAF παρακάμπτουν τα στάδια DOG → PIG → Canary
- 13:45–14:07: πρώτη σελίδα· CPU 100% παγκοσμίως, κίνηση −82%, 502 παντού· ο εσωτερικός πίνακας ελέγχου βρίσκεται πίσω από το Cloudflare Access, το οποίο είναι εκτός λειτουργίας· ορισμένα διαπιστευτήρια έχουν λήξει· μια σπάνια ασκηθείσα παράκαμψη
- 14:07–14:09: παγκόσμια τερματισμός WAF· κίνηση και CPU κανονικά μετά από 27 λεπτά· 14:52 WAF πίσω μείον τον κανόνα
- 2 Ιουλίου (15:50 UTC) και 12 Ιουλίου: Το Cloudflare δημοσιεύει τη σημείωση της ίδιας ημέρας και την πλήρη ανάλυση μετά το περιστατικό· ο φρουρός CPU επανεντάχθηκε, 3.868 κανόνες ξαναδιαβάστηκαν, σταδιακές κυκλοφορίες, μετάβαση σε μια μηχανή regex γραμμικού χρόνου

## Μεταφρασμένη μεταγραφή

Μεταφράστηκε από την πρωτότυπη αγγλική αφήγηση. Ο διαθέσιμος ήχος και οι υπότιτλοι ελέγχονται από το YouTube.

0:00 Μια κανονική έκφραση τίθεται σε λειτουργία σε κάθε διακομιστή του Cloudflare ταυτόχρονα, και για τα επόμενα είκοσι επτά λεπτά οι ιστότοποι που βρίσκονται πίσω από αυτό είναι μια σελίδα 502, που, για ένα τείχος προστασίας, είναι η αυστηρότερη δυνατή ρύθμιση. 2 Ιουλίου 2019, 13:42 UTC. Το Cloudflare δημοσιεύει εντός δύο ωρών: όχι επίθεση, αλλά κακή ανάπτυξη, η κίνηση μειώθηκε κατά 82 τοις εκατό. Δέκα ημέρες αργότερα ο CTO John Graham-Cumming δημοσιεύει την πλήρη ανάλυση μετά το περιστατικό, συμπεριλαμβανομένης της regex, και το Hacker News της δίνει 698 πόντους,

0:26 που για μια διακοπή λειτουργίας είναι όρθια χειροκρότηση. Πώς συμβαίνει, γιατί είναι δυνατόν, και ποιος φταίει πραγματικά. Αυτό είναι το The Daily Diff, ανάλυση μετά το περιστατικό. 13:31. Συγχωνεύεται ένα pull request: ένας νέος κανόνας τείχους προστασίας κατά του cross-site scripting, σε λειτουργία προσομοίωσης, οπότε δεν μπλοκάρει τίποτα. 13:37, οι δοκιμές περνούν· καμία δεν μετράει CPU. 13:42, ο κανόνας αποστέλλεται σε 180 πόλεις σε δύο δευτερόλεπτα, επειδή οι κανόνες WAF παρακάμπτουν τα στάδια dog, pig και canary που έχουν άλλες εκδόσεις.

0:54 13:45, η πρώτη σελίδα. 13:49, το Hacker News έχει ένα νήμα στη σελίδα κατάστασης, η οποία εξακολουθεί να λέει ότι όλα τα συστήματα λειτουργούν. Ο κανόνας τελειώνει σε dot-star, dot-star, equals, dot-star: οτιδήποτε, μετά οτιδήποτε, μετά ένα ίσον. Η PCRE μαντεύει με απληστία, αποτυγχάνει, και κάνει backtrack μέσα από κάθε άλλη διαίρεση. Το x ίσον x χρειάζεται 23 βήματα. Είκοσι x μετά το ίσον: 555.

1:15 Είκοσι x, χωρίς ίσον: 4.067 βήματα για να βρει τίποτα. Εκτελέστε το σε κάθε αίτημα και κάθε πυρήνας είναι στο εκατό τοις εκατό, κάνοντας τίποτα, σχολαστικά. Δύο φρουροί θα έπρεπε να το είχαν πιάσει. Το όριο CPU στους κανόνες αφαιρέθηκε κατά λάθος εβδομάδες νωρίτερα, σε μια αναδιαμόρφωση που είχε σκοπό να κάνει το WAF να χρησιμοποιεί λιγότερη CPU. Και η διαδικασία επιτρέπει σε οποιονδήποτε κανόνα να παρακάμψει το staging, επειδή οι κανόνες υπάρχουν για να σταματούν ζωντανές επιθέσεις· αυτή δεν ήταν έκτακτη ανάγκη, και έγινε παγκόσμια ούτως ή άλλως.

1:37 14:00, το WAF αναγνωρίζεται· καμία επίθεση. 14:02, κάποιος προτείνει την παγκόσμια απενεργοποίηση: ένα συστατικό, εκτός λειτουργίας, παγκοσμίως. Ο διακόπτης βρίσκεται πίσω από το Cloudflare Access. Το Cloudflare Access βρίσκεται πίσω από το Cloudflare. Ορισμένα διαπιστευτήρια έχουν λήξει λόγω αχρησίας, οπότε το ταχύτερο δίκτυο στο διαδίκτυο αφιερώνει πέντε λεπτά σε μια παράκαμψη που κανείς δεν είχε εξασκήσει. 14:07, απενεργοποίηση. 14:09, κανονική κίνηση. git blame: μια ανάπτυξη με μία ταχύτητα, παγκόσμια· ένας φρουρός CPU αναδιαμορφώθηκε κατά

2:04 λάθος· μια μηχανή regex χωρίς άνω όριο. Όχι ο μηχανικός που έγραψε τον κανόνα: η ανάλυση μετά το περιστατικό αναφέρει έντεκα αιτίες και δεν ονομάζει κανέναν. Εύρος έκρηξης: 27 λεπτά, 82 τοις εκατό της κίνησης, 100 τοις εκατό CPU σε κάθε πυρήνα, σε κάθε πόλη. Ο πίνακας ελέγχου και το API βρίσκονται πίσω από το ίδιο άκρο, οπότε οι πελάτες δεν μπορούν καν να το απενεργοποιήσουν. Hacker News, κάτω από την ανάλυση μετά το περιστατικό: είχαν ένα πρόβλημα, χρησιμοποίησαν μια κανονική έκφραση, τώρα έχουν δύο. Παλιό αστείο. Ακόμα μεταγλωττίζεται.

2:28 Ετυμηγορία, ανάλυση μετά το περιστατικό: SHIP IT. Ο φρουρός CPU είναι πίσω, όλοι οι 3.868 κανόνες διαβάζονται με το χέρι, οι κανόνες περνούν από staging, και η μηχανή μεταφέρεται σε μια με εγγυήσεις γραμμικού χρόνου, δημοσιευμένη από τον Ken Thompson το 1968. Δευτέρα: όχι dot-star dot-star σε οτιδήποτε εκτελείται ανά αίτημα, και κρατήστε τον διακόπτη απενεργοποίησης μακριά από αυτό που σκοτώνει. Στείλτε μου το περιστατικό για το οποίο δεν επιτρέπεται ακόμα να μιλήσετε, στα σχόλια, ή στο the daily diff dot dev.

2:53 Και αυτή είναι η διαφορά για σήμερα. Είμαι ο Νίκος από την Axrisi. Συγχωνεύστε υπεύθυνα.

## Πηγές

- [John Graham-Cumming, "Details of the Cloudflare outage on July 2, 2019" (Jul 12, 2019)](https://blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019/) — blog.cloudflare.com
- [Matthew Prince, "Cloudflare outage caused by bad software deploy (updated)" (Jul 2, 2019)](https://blog.cloudflare.com/cloudflare-outage/) — blog.cloudflare.com
- [Matthew Prince on X, Jul 2, 2019, 14:22 UTC](https://x.com/eastdakota/status/1146061591143538688) — x.com
- [Matthew Prince on X, Jul 2, 2019, 14:36 UTC ("No evidence yet attack related")](https://x.com/eastdakota/status/1146065231270907907) — x.com
- [Hacker News, Jul 2, 2019, 13:49 UTC — "Cloudflare Network Performance Issues" (631 points)](https://news.ycombinator.com/item?id=20334924) — news.ycombinator.com
- [Hacker News, Jul 2, 2019 — "Cloudflare outage caused by bad software deploy" (348 points)](https://news.ycombinator.com/item?id=20336332) — news.ycombinator.com
- [Hacker News, Jul 12, 2019 — "Details of the Cloudflare outage on July 2, 2019" (698 points)](https://news.ycombinator.com/item?id=20421538) — news.ycombinator.com
- [TechCrunch, Jul 2, 2019](https://techcrunch.com/2019/07/02/a-cloudflare-outage-is-impacting-sites-everywhere/) — techcrunch.com
