# Регулярний вираз вимкнув Cloudflare. 27 хвилин.

Published: 2026-09-12

2 липня 2019 року, 13:42 UTC: одне нове правило для міжмережевого екрану веб-додатків Cloudflare запускається у понад 180 містах приблизно за дві секунди. Це правило XSS у режимі симуляції, тому воно нічого не блокує, але все одно виконується для кожного запиту і закінчується на .\*(?:.\*=.\*). PCRE виконує зворотній пошук, кожне ядро ЦП, що обслуговує HTTP-запити, досягає 100 %, і кожен сайт, проксійований Cloudflare, повертає 502 протягом 27 хвилин; трафік падає на 82 %. Аварійний вимикач знаходиться за Cloudflare Access, який знаходиться за Cloudflare. Розслідування, з власного звіту Cloudflare: захист ЦП, видалений тижнями раніше під час рефакторингу, призначеного для економії ЦП, процедура, яка дозволяла будь-якому правилу пропускати проміжний етап, механізм без гарантії складності, 11 причин та 7 виправлень. Висновок щодо виправлення: SHIP IT.

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

## Що охоплює це відео

- 13:31–13:42 UTC: PR об'єднано, CI зелений (без тесту ЦП), Quicksilver розгортає правило у понад 180 містах; правила WAF пропускають етапи DOG → PIG → Canary
- 13:45–14:07: перша сторінка; ЦП 100 % по всьому світу, трафік −82 %, 502 помилки скрізь; внутрішня панель управління знаходиться за Cloudflare Access, який не працює; деякі облікові дані прострочені; рідко використовуваний обхідний шлях
- 14:07–14:09: глобальне відключення WAF; трафік та ЦП нормалізуються через 27 хвилин; 14:52 WAF повертається без правила
- 2 липня (15:50 UTC) та 12 липня: Cloudflare публікує записку того ж дня та повний звіт про інцидент; захист ЦП знову додано, 3868 правил перечитано, поетапні розгортання, перехід на механізм регулярних виразів з лінійним часом

## Перекладена стенограма

Перекладено з оригінальної англійської розповіді. Доступне аудіо та субтитри контролюються YouTube.

0:00 Один регулярний вираз запускається на кожному сервері Cloudflare одночасно, і протягом наступних двадцяти семи хвилин сайти за ним показують сторінку 502, що для міжмережевого екрану є найсуворішою можливою налаштуванням. 2 липня 2019 року, 13:42 UTC. Cloudflare публікує через дві години: не атака, а невдале розгортання, трафік впав на 82 відсотки. Через десять днів технічний директор Джон Грем-Каммінг публікує повний звіт про інцидент, включно з регулярним виразом, і Hacker News дає йому 698 балів,

0:26 що для збою є оваціями стоячи. Як це відбувається, чому це можливо, і хто насправді несе відповідальність. Це The Daily Diff, розслідування після інциденту. 13:31. Запит на злиття об'єднується: одне нове правило міжмережевого екрану проти міжсайтового скриптингу, в режимі симуляції, тому воно нічого не блокує. 13:37, тести пройшли; жоден не вимірює ЦП. 13:42, правило відправляється в 180 міст за дві секунди, оскільки правила WAF пропускають етапи dog, pig і canary, які отримують інші релізи.

0:54 13:45, перша сторінка. 13:49, на Hacker News є обговорення сторінки статусу, яка все ще говорить, що всі системи працюють. Правило закінчується на крапка-зірочка, крапка-зірочка, дорівнює, крапка-зірочка: будь-що, потім будь-що, потім знак рівності. PCRE жадібно вгадує, зазнає невдачі та повертається до кожного іншого розгалуження. x дорівнює x займає 23 кроки. Двадцять x після знака рівності: 555.

1:15 Двадцять x, без знака рівності: 4067 кроків, щоб нічого не знайти. Виконайте це для кожного запиту, і кожне ядро буде на ста відсотках, ретельно нічого не роблячи. Два охоронці повинні були це виявити. Обмеження ЦП на правила було помилково видалено тижнями раніше, під час рефакторингу, призначеного для зменшення використання ЦП міжмережевим екраном (WAF). І процедура дозволяє будь-якому правилу пропускати проміжний етап, оскільки правила існують для зупинки реальних атак; ця не була надзвичайною ситуацією, і все одно поширилася по всьому світу.

1:37 14:00, WAF ідентифіковано; атаки немає. 14:02, хтось пропонує глобальне відключення: один компонент, вимкнено по всьому світу. Перемикач знаходиться за Cloudflare Access. Cloudflare Access знаходиться за Cloudflare. Деякі облікові дані прострочені через невикористання, тому найшвидша мережа в інтернеті витрачає п'ять хвилин на обхідний шлях, який ніхто не тренував. 14:07, відключення. 14:09, трафік нормалізувався. git blame: розгортання з однією швидкістю, глобальне; захист ЦП, випадково видалений під час рефакторингу;

2:04 механізм регулярних виразів без верхньої межі. Не інженер, який написав правило: звіт про інцидент перераховує одинадцять причин і нікого не називає. Радіус ураження: 27 хвилин, 82 відсотки трафіку, 100 відсотків ЦП на кожному ядрі, у кожному місті. Панель управління та API знаходяться за тим самим межевим сервером, тому клієнти навіть не можуть вимкнути це. Hacker News, під звітом про інцидент: у них була одна проблема, використали регулярний вираз, тепер у них дві. Старий жарт. Все ще компілюється.

2:28 Висновок, після інциденту: SHIP IT. Захист ЦП повернуто, всі 3868 правил перечитуються вручну, правила проходять через проміжний етап, і механізм переходить до того, що має гарантії лінійного часу, опубліковані Кеном Томпсоном у 1968 році. Понеділок: без крапка-зірочка крапка-зірочка у всьому, що виконується за запитом, і тримати аварійний вимикач подалі від того, що він вимикає. Надішліть мені інцидент, про який вам все ще не дозволено говорити, у коментарях або на the daily diff dot dev.

2:53 І це diff на сьогодні. Я Ніко з 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
