Технический директор Cloudflare (предоставляет услуги CDN, защиты от DDoS‑атак и безопасный доступ к ресурсам и серверам DNS Дейн Кнехт раскрыл причину получасового глобального сбоя в работе сервисов компании, который произошёл 5 декабря 2025 года.
В это время инженеры платформы выполняли запланированную работу по устранению критической уязвимости CVE-2025-55182, которая позволяет выполнить произвольный код на серверных компонентах React 19.0.0/19.1.0/19.1.1/19.2.0. Специалисты обновляли защиту платформы на уровне системы фильтрации трафика WAF (Web Application Firewall) для блокирования вредоносных запросов, код которой написан на языке Lua.
С внедрением в продуктивной среде новой системы защиты что‑то пошло не так. В процессе проведения работ инженеры увеличили размер буфера для проверки трафика на прокси‑серверах с ранее используемого параметра в 128 КБ. Оказалось, что применяемый для тестирования WAF инструментарий компании не поддерживает выставленный новый размер буфера. Так как этот инструментарий не влиял на трафик, то инженерами было принято решение отключить его.
Для выполнения этой операции инженеры Cloudflare воспользовались подсистемой killswitch для быстрого изменения конфигурации и отключения отдельных Lua‑обработчиков на прокси‑серверах без замены правил.
Подобный метод отключения правил периодически применяется для быстрого устранения ошибок и приводит к пропуску выполнения части Lua‑кода. При этом инженеры не учли, что для вызова отключаемого тестового инструментария в Lua‑правилах применялся метод execute, запускающий дополнительный набор правил.
Ранее в Cloudflare режим killswitch никогда не применялся с правилами, имеющими вызов execute, и данная комбинация не тестировалась.
Применение killswitch привело к тому, что код на Lua с определением дополнительного тестового набора правил был отключён, но вызов этого набора правил через execute остался. В коде не было дополнительных проверок существования объекта и подразумевалось, что при наличии в наборе правил действия execute, объект rule_result.execute обязательно существует.
В итоге, произошла попытка выполнения метода execute для неинициализированного объекта, которая привела к аварийному завершению обработчика с ошибкой attempt to index field 'execute' (a nil value).
«Это простая ошибка в коде, которая оставалась незамеченной много лет. Языки со строгой системой типов предотвращают подобные ошибки кода. При замене этого кода в нашем новом прокси FL2, написанном на Rust, ошибка не возникла», — пояснили в Cloudflare.
«Проблема была обнаружена вскоре после применения изменения и устранена в 09:12 (через 25 минут после начала инцидента), после чего весь трафик обслуживался корректно. Это затронуло клиентов, чьи веб‑ресурсы обслуживались нашим старым прокси‑сервером FL1 И у которых был развёрнут набор правил Cloudflare Managed Ruleset. Все запросы к веб‑сайтам в этом состоянии возвращали ошибку HTTP 500, за небольшим исключением некоторых тестовых конечных точек, таких как /cdn‑cgi/trace. Клиенты, у которых не была применена указанная выше конфигурация, не пострадали. Трафик клиентов, обслуживаемый нашей сетью в Китае, также не пострадал», — подытожили в Cloudflare.
В ноябре 2025 года в Cloudflare раскрыли причину почти пятичасового глобального сбоя в работе своих сервисов. Проблема была не в DNS, и не было внешней атаки. Оказалось, что это была ошибка в файле конфигурации системы защиты от ботов, который перед началом инцидента был обновлён инженерами Cloudflare в плановом порядке.