Cloudflare se zhroutí kvůli problému s Lua

Dva týdny po posledním globálním výpadku, včera, došlo u sítě pro doručování obsahu Cloudflare, která zpracovává přibližně 20 % veškerého globálního webového provozu, k částečnému výpadku po dobu 25 minut. Během incidentu přibližně třetina požadavků Cloudflare vrátila prázdnou stránku s chybovým kódem 500. Tentokrát byla příčinou dlouhodobý problém v kódu Lua, který používá systém filtrování provozu WAF (Web Application Firewall) k blokování škodlivých požadavků.


Cloudflare se zhroutí kvůli problému s Lua

Aby ochránili zákaznické systémy před kritickou zranitelností (CVE-2025-55182) v serverových komponentách frameworku React, implementovali inženýři společnosti Cloudflare po zveřejnění exploitu ochranu na úrovni WAF. Implementace ochrany se neobešla bez problémů: během implementace byla zvětšena velikost vyrovnávací paměti pro inspekci provozu na proxy.servery, ale ukázalo se, že sada nástrojů pro testování WAF nepodporovala zadanou velikost vyrovnávací paměti. Protože tato sada nástrojů neovlivňuje provoz, bylo rozhodnuto ji deaktivovat.

Pro deaktivaci testu inženýři použili subsystém „killswitch“ pro rychlou změnu konfigurace a deaktivaci jednotlivých obslužných programů Lua na proxy serverech bez změny pravidel. Tato metoda deaktivace pravidel se občas používá k rychlému ladění chyb a vede k přeskočení provádění některého kódu Lua. Inženýři však nezohlednili, že pravidla Lua používala metodu „execute“ k volání deaktivované testovací sady nástrojů, která spustila další sadu pravidel. Režim „killswitch“ nebyl nikdy dříve použit s pravidly, která volala „execute“, a tato kombinace nebyla testována.

Použití přepínače „killswitch“ deaktivovalo kód definující dodatečnou sadu pravidel pro testování, ale volání této sady pravidel pomocí příkazu „execute“ zůstalo zachováno. Kód postrádal další kontroly existence objektu a předpokládal, že pokud je akce „execute“ v sadě pravidel přítomna, bude existovat objekt „rule_result.execute“. V důsledku toho byl proveden pokus o spuštění metody „execute“ na neinicializovaném objektu, což způsobilo pád obslužné rutiny s chybou „attempt to index field 'execute' (a nil value)“. if rule_result.action == "execute" then rule_result.execute.results = ruleset_results[tonumber(rule_result.execute.results_index)] end

Zdroj: opennet.ru

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster