Errore in Cloudflare a causa di un problema nel codice Lua

Dopo due settimane dall'ultimo grave blackout globale, ieri la rete di distribuzione dei contenuti Cloudflare, che gestisce circa il 20% del traffico web mondiale, è stata parzialmente inattiva per 25 minuti. Durante l'incidente, circa un terzo delle richieste tramite Cloudflare si è concluso con il ritorno di una pagina vuota con codice di errore 500. Questa volta, la causa è stata un problema nel codice Lua, rimasto inosservato per anni, utilizzato nel sistema di filtraggio del traffico WAF (Web Application Firewall) per bloccare le richieste dannose.

Errore in Cloudflare a causa di un problema nel codice Lua

Per proteggere i sistemi dei clienti da una vulnerabilità critica (CVE-2025-55182) nei componenti server del framework React, dopo la pubblicazione di un exploit, gli ingegneri di Cloudflare hanno implementato una protezione a livello di WAF. Tuttavia, l'implementazione non è andata liscia: durante il processo, è stato aumentato il dimensionamento del buffer per il controllo del traffico sul proxy-server, ma si è scoperto che l'toolset utilizzato per testare il WAF non supportava il dimensionamento del buffer impostato. Poiché questo toolset non influisce sul traffico, è stato deciso di disattivarlo.

Per disattivarlo, gli ingegneri hanno utilizzato il sottosistema "killswitch" per modificare rapidamente la configurazione e disattivare singoli gestori Lua sui server proxy senza sostituire le regole. Questo metodo di disattivazione delle regole viene applicato periodicamente per risolvere rapidamente gli errori e porta a saltare l'esecuzione di parte del codice Lua. Tuttavia, gli ingegneri non hanno tenuto conto del fatto che per chiamare il toolset di test disattivato nelle regole Lua veniva utilizzato il metodo "execute", che avvia un ulteriore insieme di regole. In passato, la modalità "killswitch" non era mai stata applicata a regole con la chiamata "execute", e questa combinazione non è stata testata.

L'applicazione del «killswitch» ha portato alla disattivazione del codice per la definizione di un set di regole di test aggiuntive, ma la chiamata a questo set di regole attraverso «execute» è rimasta. Nel codice non c'erano ulteriori verifiche sull'esistenza dell'oggetto e si sottintendeva che, in presenza dell'azione «execute» nel set di regole, l'oggetto «rule_result.execute» esistesse necessariamente. Di conseguenza, si è verificato un tentativo di eseguire il metodo «execute» su un oggetto non inizializzato, che ha portato alla chiusura anomala del gestore con l'errore «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

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster