TvÄ veckor efter den senaste globala störningen var Cloudflares nÀtverk för innehÄllsleverans, som hanterar cirka 20 % av vÀrldens webben, delvis otillgÀngligt i 25 minuter igÄr. Under incidenten avslutades ungefÀr en tredjedel av begÀrningarna via Cloudflare med en tom sida som visade felkod 500. Denna gÄng var orsaken ett problem i Lua-koden, som hade förblivit osett i flera Är, i systemet för trafikfiltrering WAF (Web Application Firewall) som blockerar skadliga begÀrningar.

För att skydda kundsystem frÄn en kritisk sÄrbarhet (CVE-2025-55182) i serverkomponenterna av React-ramverket, implementerade Cloudflares ingenjörer ett skydd pÄ WAF-nivÄ efter att ett exploit blev offentligt tillgÀngligt. Införandet av skyddet gick dock inte helt smidigt: under implementeringen ökades buffertstorleken för trafikgranskning pÄ proxy-servrar, men det visade sig att det verktyg som anvÀndes för att testa WAF inte stödjer den angivna buffertstorleken. Eftersom detta verktyg inte pÄverkar trafiken beslutades det att stÀnga av det.
För att stÀnga av det anvÀnde ingenjörerna subsystemet "killswitch" för att snabbt Àndra konfigurationen och inaktivera vissa Lua-hanterare pÄ proxyservrar utan att byta regler. En sÄdan metod för att stÀnga av regler anvÀnds ibland för att snabbt ÄtgÀrda fel och resulterar i att en del Lua-kod inte körs. Ingenjörerna beaktade inte att metoden "execute" anvÀndes för att anropa det avstÀngda testverktyget i Lua-reglerna, vilket startar en ytterligare uppsÀttning regler. Tidigare har "killswitch"-lÀget aldrig anvÀnts med regler som har anropat "execute", och denna kombination har inte testats.
AnvĂ€ndningen av "killswitch" ledde till att koden för definiering av en extra testuppsĂ€ttning av regler avaktiverades, men anropet av denna uppsĂ€ttning regler via "execute" kvarstod. I koden fanns inga ytterligare kontroller för existensen av objektet och det antogs att om handlingen "execute" fanns i uppsĂ€ttningen av regler, sĂ„ existerade objektet "rule_result.execute" nödvĂ€ndigtvis. Resultatet blev ett försök att utföra metoden "execute" för ett oinitialiserat objekt, vilket ledde till att behandlaren avslutades med felet "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
KĂ€lla: opennet.ru
