Kaks nädalat pärast eelmist suurt riket, oli eile Cloudflare'i sisuhalduse võrk, mis teenindab umbes 20% kogu maailma veebiliiklusest, osaliselt 25 minutit välja lülitatud. Selle juhtumi ajal lõppes umbes kolmandik Cloudflare'i kaudu tehtud päringutest tühja lehe tagastamisega, millel oli 500. vea kood. Seekord oli põhjuseks aastaid tähelepanuta jäänud probleem Lua keeles kirjutatud koodis, mida kasutatakse WAF (Web Application Firewall) liikluse filtreerimissüsteemis, et blokeerida pahatahtlikke päringuid.

Kliendi süsteemide kaitsmiseks kriitilise haavatavuse (CVE-2025-55182) eest Reacti raamistikus olevates serveri komponentides, pärast avalikkuse ette pääsemist eksploitide kohta, rakendas Cloudflare WAF-tasandi kaitset. Kuid rakendamise käigus ei läinud kõik sujuvalt: liikluse kontrollimiseks proxy-serverites, suurendati puhveri suurust, kuid selgus, et WAF-i testimisriist ei toeta seatud puhveri suurust. Kuna see tööriist ei mõjuta liiklust, otsustati see välja lülitada.
Kinnitamist, insenerid kasutasid «killswitch» alamsüsteemi konfigureerimise kiireks muutmiseks ja üksikute Lua-protsessorite väljalülitamiseks tõrkeotsingute ajal ilma reeglite vahetamiseta. Seda tüüpi reeglite väljalülitamist rakendatakse perioodiliselt kiirete vigade kõrvaldamiseks, kuid see toob kaasa osa Lua-koodi täitmise vahelejätmise. Insenerid ei arvestanud, et väljalülitamise testimistööriista kutsumise jaoks kasutati Lua-reeglite seas meetodit «execute», mis käivitab täiendava reeglite kogumi. Varem ei olnud «killswitch» režiimi kunagi rakendatud reeglitega, kus oli «execute» kutse, ja seda kombinatsiooni ei testitud.
Kasutades «killswitch’i» lülitati välja kood, mis määratles täiendava testide komplekti reeglid, kuid sellele komplektile viitamine läbi «execute» jäi alles. Koodis ei olnud täiendavaid kontrolle objekti olemasolu osas ja eeldati, et kui reeglite komplekti toimingutes on «execute», siis objekt «rule_result.execute» on kindlasti olemas. Tulemuseks oli katse käivitada meetod «execute» algatamata objekti jaoks, mis viis töötleja kokkuvarisemiseni veaga «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
Allikas: opennet.ru
