Eșec în Cloudflare din cauza unei probleme în codul scris în Lua

După două săptămâni de la ultimul global, ieri rețeaua de livrare a conținutului Cloudflare, care deservește aproximativ 20% din tot traficul web global, a fost parțial indisponibilă timp de 25 de minute. În timpul incidentului, aproximativ o treime din cererile prin Cloudflare s-au încheiat cu o pagină goală și codul de eroare 500. De data aceasta, cauza a fost o problemă în codul scris în Lua, care a rămas neobservată timp de mulți ani, utilizat în sistemul de filtrare a traficului WAF (Web Application Firewall) pentru blocarea cererilor dăunătoare.

Eșec în Cloudflare din cauza unei probleme în codul scris în Lua

Pentru a proteja sistemele clienților de o vulnerabilitate critică (CVE-2025-55182) în componentele server-side ale framework-ului React, după ce exploit-ul a devenit public, inginerii Cloudflare au implementat protecție la nivel de WAF. Cu toate acestea, implementarea nu a decurs fără probleme: în timpul procesului, dimensiunea bufferului pentru verificarea traficului pe proxy a fost crescută,servere, dar s-a dovedit că instrumentul utilizat pentru testarea WAF nu suportă dimensiunea bufferului stabilită. Deoarece acest instrument nu influențează traficul, s-a decis dezactivarea acestuia.

Pentru dezactivare, inginerii au folosit subsistemul „killswitch” pentru a modifica rapid configurația și a dezactiva anumite procesatoare Lua pe serverele proxy fără a înlocui regulile. Această metodă de dezactivare a regulilor este utilizată periodic pentru a remedia rapid erorile și duce la o parte din codul Lua care este omis. În acest context, inginerii nu au ținut cont de faptul că pentru invocarea instrumentului de testare dezactivat în regulile Lua se utiliza metoda „execute”, care declanșează un set suplimentar de reguli. Anterior, modul „killswitch” nu fusese niciodată aplicat cu reguli care au invocări „execute”, iar această combinație nu a fost testată.

Utilizarea „killswitch” a dus la dezactivarea codului care definea un set suplimentar de reguli de testare, dar apelul acestui set de reguli prin „execute” a rămas. În cod nu existau verificări suplimentare pentru existența obiectului și se presupunea că, în cazul în care setul de reguli avea acțiunea „execute”, obiectul „rule_result.execute” există cu siguranță. În cele din urmă, s-a încercat executarea metodei „execute” pentru un obiect neinițializat, ceea ce a dus la încheierea anormală a gestionatorului cu eroarea „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

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster