Storing in Cloudflare door een probleem in Lua-code

Na twee weken sinds de vorige wereldwijde storing was het gisterennacht 25 minuten lang gedeeltelijk niet mogelijk om toegang te krijgen tot het content delivery network Cloudflare, dat ongeveer 20% van al het wereldwijde webverkeer bedient. Tijdens het incident eindigde ongeveer een derde van de verzoeken via Cloudflare met een lege pagina en foutcode 500. Dit keer was de oorzaak een probleem in de Lua-code, dat jarenlang onopgemerkt bleef, en dat werd gebruikt in het verkeersfilteringssysteem WAF (Web Application Firewall) om schadelijke verzoeken te blokkeren.

Storing in Cloudflare door een probleem in Lua-code

Om de systemen van klanten te beschermen tegen de kritieke kwetsbaarheid (CVE-2025-55182) in de servercomponenten van het React-framework, hebben de engineers van Cloudflare na de publicatie van de exploit bescherming op WAF-niveau geĆÆmplementeerd. Bij de invoering van deze bescherming ging niet alles goed: tijdens de implementatie werd de bufferomvang voor het controleren van het verkeer op de proxy-serversen het bleek dat het testinstrument voor WAF dat gebruikt werd, de ingestelde bufferomvang niet ondersteunde. Aangezien dit instrument geen invloed heeft op het verkeer, werd besloten om het uit te schakelen.

Voor het uitschakelen maakten de engineers gebruik van het "killswitch"-systeem voor snelle configuratiewijzigingen om afzonderlijke Lua-handlers op de proxyservers uit te schakelen zonder de regels te vervangen. Deze methode voor het uitschakelen van regels wordt regelmatig gebruikt voor het snel oplossen van fouten en leidt tot het overslaan van de uitvoering van een deel van de Lua-code. Daarbij hebben de engineers niet in overweging genomen dat voor het aanroepen van het uitgeschakelde testinstrument in de Lua-regels de methode "execute" werd gebruikt, die een extra set regels activeert. Eerder was de "killswitch"-modus nooit toegepast in combinatie met regels die de "execute"-aanroep bevatten, en deze combinatie was niet getest.

Het gebruik van de 'killswitch' heeft ertoe geleid dat de code voor het definiĆ«ren van een extra testset van regels werd uitgeschakeld, maar de aanroep van deze set regels via 'execute' bleef bestaan. In de code waren er geen extra controles op het bestaan van het object, en werd aangenomen dat als er in de set regels een actie 'execute' aanwezig was, het object 'rule_result.execute' beslist bestond. Dit leidde uiteindelijk tot een poging om de methode 'execute' aan te roepen voor een niet-geĆÆnitialiseerd object, wat resulteerde in een crash van de handler met de foutmelding '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

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster