Fallo en Cloudflare debido a un problema en el código escrito en Lua

Después de dos semanas desde la última interrupción global, ayer la red de distribución de contenido Cloudflare, que maneja aproximadamente el 20% de todo el tráfico web mundial, estuvo parcialmente fuera de servicio durante 25 minutos. Durante el incidente, alrededor de un tercio de las solicitudes a través de Cloudflare devolvieron una página en blanco con el código de error 500. Esta vez, la causa fue un problema en el código en Lua, que había permanecido sin ser detectado durante años, utilizado en el sistema de filtrado de tráfico WAF (Web Application Firewall) para bloquear solicitudes maliciosas.

Fallo en Cloudflare debido a un problema en el código escrito en Lua

Para proteger los sistemas de los clientes de una vulnerabilidad crítica (CVE-2025-55182) en los componentes del servidor del framework React, después de que se hiciera público un exploit, los ingenieros de Cloudflare implementaron una protección a nivel de WAF. Sin embargo, la implementación no fue del todo fluida: durante el proceso, se aumentó el tamaño del búfer para la verificación del tráfico en el proxy-como en entornos de nube públicos o privados., pero resultó que la herramienta utilizada para probar el WAF no soportaba el tamaño de búfer establecido. Dado que esta herramienta no afecta al tráfico, se decidió desactivarla.

Para desactivarla, los ingenieros utilizaron el subsistema 'killswitch' para cambiar rápidamente la configuración y desactivar controladores Lua específicos en los servidores proxy sin reemplazar las reglas. Este método de desactivación de reglas se utiliza periódicamente para corregir errores rápidamente y lleva a omitir la ejecución de parte del código Lua. Sin embargo, los ingenieros no tuvieron en cuenta que para invocar la herramienta de prueba desactivada en las reglas Lua se utilizó el método 'execute', que lanza un conjunto adicional de reglas. Anteriormente, el modo 'killswitch' nunca se había utilizado con reglas que contenían llamadas a 'execute', y esta combinación no fue probada.

La implementación del "killswitch" resultó en que el código para la definición de un conjunto adicional de reglas de prueba se desactivara, pero la llamada a este conjunto de reglas a través de "execute" permaneció. En el código no había verificaciones adicionales de la existencia del objeto y se suponía que, en caso de que existiera la acción "execute" en el conjunto de reglas, el objeto "rule_result.execute" debía existir necesariamente. Como resultado, se intentó ejecutar el método "execute" para un objeto no inicializado, lo que provocó un cierre inesperado del controlador con el error "intento de indexar el campo 'execute' (un valor nil)". if rule_result.action == "execute" then rule_result.execute.results = ruleset_results[tonumber(rule_result.execute.results_index)] end

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster