+− THE DAILY DIFFdev & AI news
SHIP IT

Регулярное выражение обрушило Cloudflare. На 27 минут.

2 июля 2019 года, 13:42 UTC: новое правило для брандмауэра веб-приложений Cloudflare вводится в действие в более чем 180 городах примерно за две секунды.

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

Читать письменное издание (на английском) ↗

Что освещается в этом видео

  • 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 публикует записку в тот же день и полный отчет о происшествии; защита ЦП снова добавлена, 3 868 правил перечитаны, поэтапное развертывание, переход на движок регулярных выражений с линейным временем выполнения

Переведенная стенограмма

Переведено с оригинального английского повествования. Доступные аудио и субтитры контролируются 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, без знака равенства: 4 067 шагов, чтобы ничего не найти. Запустите это при каждом запросе, и каждое ядро будет загружено на сто процентов, тщательно ничего не делая. Два охранника должны были это заметить. Лимит ЦП для правил был удален по ошибке неделями ранее, в рефакторинге, предназначенном для уменьшения использования ЦП брандмауэром. И процедура позволяет любому правилу пропускать этап тестирования, потому что правила существуют для остановки активных атак; это не было чрезвычайной ситуацией, и все равно стало глобальным.

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 году. Понедельник: никаких точка-звезда точка-звезда в том, что выполняется при каждом запросе, и держите аварийный выключатель подальше от того, что он отключает. Пришлите мне инцидент, о котором вам до сих пор не разрешено говорить, в комментариях или на daily diff dot dev.

2:53 И это на сегодня всё. Я Нико из Axrisi. Объединяйте ответственно.

Источники

  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

Похожие видео

postmortem · ru · 25 сент. 2026 г.

Ошибка в одну миллисекунду остановила воздушное движение в Великобритании. На шесть часов.

Во вторник, 8 сентября, в 10:00 обычный запрос squawk-кода в Национальной системе воздушного пространства NATS (NAS) прерывается сообщением с более высоким приоритетом в процессе обновления значения.

3:06 ↗
postmortem · ru · 22 сент. 2026 г.

Перезагрузка отбросила Telstra в 2006 год. Девять миллионов телефонов.

Инженер в Мельбурне в 2:50 ночи снова включает шасси синхронизации, и к завтраку крупнейшая мобильная сеть Австралии соглашается, что сейчас ноябрь 2006 года. 8 июля 2026 года: GPS-карта в шасси NTP T

3:15 ↗