Cloudflare-fejl på grund af et problem med Lua-kode

To uger efter det seneste globale nedbrud blev Cloudflare's indholdleveringsnetværk, der betjener cirka 20% af den samlede webtrafik verden over, delvist utilgængeligt i 25 minutter i går. Under hændelsen sluttede cirka en tredjedel af anmodningerne gennem Cloudflare med at returnere en tom side med fejlkode 500. Denne gang var årsagen et problem i Lua-koden, der har været uopdaget i mange år, og som bruges i WAF (Web Application Firewall) til at blokere ondsindede anmodninger.

Cloudflare-fejl på grund af et problem med Lua-kode

For at beskytte kundernes systemer mod en kritisk sårbarhed (CVE-2025-55182) i serverkomponenterne i React-rammen, efter en offentliggørelse af et exploit, implementerede Cloudflare beskyttelse på WAF-niveau. Implementeringen gik dog ikke helt glat: under processen blev størrelsen på bufferen til trafikovervågning på proxy-servere, men det viste sig, at det anvendte WAF-testværktøj ikke understøttede den angivne bufferstørrelse. Da dette værktøj ikke påvirker trafikken, blev det besluttet at deaktivere det.

For at deaktivere brugte ingeniørerne "killswitch"-undersystemet til hurtigt at ændre konfigurationen og deaktivere specifikke Lua-håndterere på proxy-serverne uden at ændre reglerne. Denne metode til at deaktivere regler anvendes fra tid til anden til hurtigt at rette fejl og fører til, at dele af Lua-koden bliver sprunget over. Ingeniørerne tog ikke højde for, at metoden "execute", der kaldte det deaktiverede testværktøj, blev anvendt i Lua-reglerne og aktiverede et ekstra sæt regler. Tidligere er "killswitch"-tilstand aldrig blevet anvendt med regler, der indeholder kald til "execute", og denne kombination er ikke blevet testet.

Brugen af «killswitch» resulterede i, at koden til at definere et ekstra testsæt af regler blev deaktiveret, men kaldet til dette regelsæt gennem «execute» forblev. Der var ingen yderligere kontroller for tilstedeværelsen af objektet i koden, og det blev antaget, at hvis der var en «execute»-handling i regelsættet, så eksisterede objektet «rule_result.execute» nødvendigvis. I sidste ende skete der et forsøg på at udføre metoden «execute» for et ikke-initialiseret objekt, hvilket førte til en krasj i håndtereren med fejlen «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

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster