Nach zwei Wochen seit dem vorherigen globalen Ausfall war das Content Delivery Network Cloudflare, das etwa 20 % des weltweiten Webtraffics bedient, gestern fĂŒr 25 Minuten teilweise nicht erreichbar. WĂ€hrend des Vorfalls endete ungefĂ€hr ein Drittel der Anfragen ĂŒber Cloudflare mit einer leeren Seite und dem Fehlercode 500. Dieses Mal war die Ursache ein seit vielen Jahren unbemerktes Problem im Lua-Code, der im WAF (Web Application Firewall) zur Filterung von Traffic verwendet wird, um bösartige Anfragen zu blockieren.

Um die Systeme der Kunden vor einer kritischen Schwachstelle (CVE-2025-55182) in den Serverkomponenten des React-Frameworks zu schĂŒtzen, setzten die Ingenieure von Cloudflare nach der Veröffentlichung eines Exploits einen Schutz auf der WAF-Ebene in Kraft. Bei der Implementierung der SchutzmaĂnahmen gab es jedoch Schwierigkeiten: Im Verlauf der Implementierung wurde die GröĂe des Puffers zur ĂberprĂŒfung des Traffics an den Proxys erhöht,Servern, doch stellte sich heraus, dass das zur Testsupport verwendete WAF-Tool die festgelegte PuffergröĂe nicht unterstĂŒtzt. Da dieses Tool keinen Einfluss auf den Traffic hat, wurde beschlossen, es abzuschalten.
Um die Abschaltung durchzufĂŒhren, nutzten die Ingenieure das "Killswitch"-Subsystem, um die Konfiguration schnell zu Ă€ndern und bestimmte Lua-Handler auf den Proxys ohne RegelĂ€nderungen abzuschalten. Eine solche Methode zur Regelabschaltung wird regelmĂ€Ăig verwendet, um Fehler schnell zu beheben und fĂŒhrt dazu, dass ein Teil des Lua-Codes nicht ausgefĂŒhrt wird. Die Ingenieure hatten dabei jedoch nicht berĂŒcksichtigt, dass die abgeschaltete Testumgebung in den Lua-Regeln die Methode "execute" verwendete, die einen zusĂ€tzlichen Regelanschluss auslöst. Der "Killswitch"-Modus war zuvor nie mit Regeln verwendet worden, die einen "execute"-Aufruf enthalten, und diese Kombination war nicht getestet worden.
Die Anwendung des âkillswitchâ fĂŒhrte dazu, dass der Code zur Definition zusĂ€tzlicher Testregeln deaktiviert wurde, jedoch der Aufruf dieser Regel ĂŒber âexecuteâ erhalten blieb. Im Code gab es keine zusĂ€tzlichen ĂberprĂŒfungen auf die Existenz des Objekts, und es wurde vorausgesetzt, dass das Objekt ârule_result.executeâ bei Vorhandensein der Aktion âexecuteâ in den Regeln zwingend existiert. Infolgedessen kam es zu einem Versuch, die Methode âexecuteâ fĂŒr ein nicht initialisiertes Objekt auszufĂŒhren, was zu einem Absturz des Handlers mit dem Fehler âattempt to index field âexecuteâ (a nil value)â fĂŒhrte. if rule_result.action == âexecuteâ then rule_result.execute.results = ruleset_results[tonumber(rule_result.execute.results_index)] end
Quelle: opennet.ru
