Всего через две недели после предыдущего масштабного сбоя глобальная сеть доставки контента Cloudflare вновь столкнулась с серьезными проблемами. 5 декабря 2025 года примерно в 08:47 по всемирному координированному времени значительная часть инфраструктуры компании стала возвращать клиентам ошибки. Инцидент, который затронул около 28% всего HTTP-трафика платформы, был полностью устранен к 09:12, то есть через 25 минут. Как выяснилось, причиной стала давно существовавшая, но остававшаяся незамеченной ошибка в коде на языке Lua, который используется в системе фильтрации веб-приложений (WAF).
По словам технического директора Cloudflare Дейна Кнехта, инцидент не был связан с кибератакой или вредоносной активностью. Его корень лежал в плановых работах по защите клиентов от критической уязвимости CVE-2025-55182 в серверных компонентах фреймворка React. Для блокирования потенциально опасных запросов инженеры начали развертывать обновление, увеличивающее размер буфера для анализа тела HTTP-запроса с 128 КБ до 1 МБ.
В процессе развертывания специалисты обнаружили, что внутренний инструментарий для тестирования правил WAF не поддерживает новый размер буфера. Поскольку этот инструмент не влиял на клиентский трафик, было принято решение отключить его с помощью специального механизма экстренного отключения - killswitch. Этот механизм позволяет быстро деактивировать отдельные Lua-обработчики на прокси-серверах без полной замены конфигурации. Однако именно это решение привело к непредвиденным последствиям.
Проблема возникла из-за специфики работы правил в системе Cloudflare. Одно из правил использовало действие "execute" для запуска дополнительного набора тестовых правил. Когда через killswitch было отключено определение этого вложенного набора, сам вызов "execute" в основном правиле остался активным. В коде обработки результатов не было проверки на существование объекта "rule_result.execute". В результате при обработке запроса система попыталась обратиться к неинициализированному объекту, что вызвало ошибку Lua: "attempt to index field 'execute' (a nil value)". Это привело к аварийному завершению обработчика и возврату для клиентов ошибки HTTP 500.
| 1 2 3 | if rule_result.action == "execute" then rule_result.execute.results = ruleset_results[tonumber(rule_result.execute.results_index)] end |
Кнехт подчеркнул, что это типовая ошибка, которую предотвращают языки программирования со строгой системой типов. В новой версии прокси-сервера FL2, написанной на Rust, эта проблема не возникает. Затронуты были только клиенты, чьи ресурсы обслуживались устаревшим прокси FL1 и у которых был активен Managed Ruleset от Cloudflare. Трафик в сети компании в Китае, а также клиенты с другой конфигурацией не пострадали.
Это уже второй серьезный сбой в работе Cloudflare за короткий период. Компания признает, что подобная частота инцидентов недопустима для сети, обслуживающей около 20% мирового веб-трафика. После инцидента 18 ноября Cloudflare анонсировала ряд проектов по повышению отказоустойчивости, включая улучшенные механизмы постепенного развертывания изменений и обработки ошибок по принципу "fail-open" (отказ в сторону прохождения трафика). Однако эти меры еще не были полностью внедрены к моменту нового сбоя.
Компания принесла извинения клиентам и заявила, что сейчас все изменения в конфигурации сети заблокированы до тех пор, пока не будут доработаны и внедрены более безопасные системы развертывания и отката. Детальный план работ по повышению устойчивости инфраструктуры Cloudflare обещает опубликовать на следующей неделе.