Глобальная проблема в Cloudflare была вызвана скрытой ошибкой в Lua

Всего через две недели после предыдущего масштабного сбоя глобальная сеть доставки контента 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.

Кнехт подчеркнул, что это типовая ошибка, которую предотвращают языки программирования со строгой системой типов. В новой версии прокси-сервера FL2, написанной на Rust, эта проблема не возникает. Затронуты были только клиенты, чьи ресурсы обслуживались устаревшим прокси FL1 и у которых был активен Managed Ruleset от Cloudflare. Трафик в сети компании в Китае, а также клиенты с другой конфигурацией не пострадали.

Это уже второй серьезный сбой в работе Cloudflare за короткий период. Компания признает, что подобная частота инцидентов недопустима для сети, обслуживающей около 20% мирового веб-трафика. После инцидента 18 ноября Cloudflare анонсировала ряд проектов по повышению отказоустойчивости, включая улучшенные механизмы постепенного развертывания изменений и обработки ошибок по принципу "fail-open" (отказ в сторону прохождения трафика). Однако эти меры еще не были полностью внедрены к моменту нового сбоя.

Компания принесла извинения клиентам и заявила, что сейчас все изменения в конфигурации сети заблокированы до тех пор, пока не будут доработаны и внедрены более безопасные системы развертывания и отката. Детальный план работ по повышению устойчивости инфраструктуры Cloudflare обещает опубликовать на следующей неделе.

Комментарии: 0