Dështimi në Cloudflare për shkak të një problemi në kodin e shkruar në gjuhën Lua

Pas dy javësh nga problemi i fundit global, dje rrjeti i shpërndarjes së përmbajtjes Cloudflare, që shërben për rreth 20% të tërë trafikut web global, ishte pjesërisht i padisponueshëm për 25 minuta. Gjatë incidentit, rreth një e treta e kërkesave përmes Cloudflare përfundoi duke kthyer një faqe bosh me kodin e gabimit 500. Këtë herë, shkaku ishte një problem i mbetur i paditur për shumë vjet në kodin në gjuhën Lua, e cila përdoret në sistemin e filtrimit të trafikut WAF (Web Application Firewall) për të bllokuar kërkesat e dëmshme.

Dështimi në Cloudflare për shkak të një problemi në kodin e shkruar në gjuhën Lua

Për të mbrojtur sistemet e klientëve nga një dobësi kritike (CVE-2025-55182) në komponentët server të framework-ut React, pas shpërthimit të një eksploiti në publik, inxhinierët e Cloudflare implementuan mbrojtje në nivelin WAF. Me zbatimin e mbrojtjes, nuk gjithçka shkoi siç duhej: gjatë procesit të implementimit u rrit madhësia e buffer-it për kontrollin e trafikut në proxy-sistemet, por u zbulua se mjeti i përdorur për testimin WAF nuk mbështetej në madhësinë e caktuar të buffer-it. Duke qenë se ky mjet nuk ndikonte në trafikun, u vendos të shpërbëhej.

Për të shpërbërë, inxhinierët përdorën nën-sistemin "killswitch" për të bërë ndryshime të shpejta në konfigurim dhe për të ndaluar menaxherët e veprimit Lua në serverët proxy pa ndërruar rregullat. Ky metodë për ndalimin e rregullave aplikohet periodikisht për të shpejtuar rregullimin e gabimeve dhe çon në mungesën e ekzekutimit të një pjese të kodit Lua. Në këtë kontekst, inxhinierët nuk e morën parasysh se për thirrjen e mjetit të fikur në rregullat Lua ishte përdorur metoda "execute", e cila aktivizonte një grup shtesë rregullash. Më parë, mënyra "killswitch" nuk ishte aplikuar kurrë me rregulla që kishin thirrjen "execute", dhe kjo kombinim nuk ishte testuar.

PĂ«rdorimi i 'killswitch' çoi nĂ« çaktivizimin e kodit qĂ« pĂ«rcakton njĂ« grup tĂ« shtesave tĂ« rregullave pĂ«r testim, por thirrja e kĂ«tij grupi rregullash pĂ«rmes 'execute' mbeti. NĂ« kod nuk kishte kontrolle shtesĂ« pĂ«r ekzistencĂ«n e objektit dhe ishte nĂ«nkuptuar se, nĂ«se ekziston nĂ« grupin e rregullave veprimi 'execute', objekti 'rule_result.execute' do tĂ« ekzistojĂ« patjetĂ«r. Si rezultat, u pĂ«rpoq tĂ« ekzekutonte metodĂ«n 'execute' pĂ«r njĂ« objekt tĂ« pa-inicializuar, qĂ« çoi nĂ« njĂ« pĂ«rfundim tĂ« papritur tĂ« trajtuesit me gabimin 'pĂ«rpjekje pĂ«r tĂ« indeksuar fushĂ«n ‘execute’ (njĂ« vlerĂ« nil). if rule_result.action == 'execute' then rule_result.execute.results = ruleset_results[tonumber(rule_result.execute.results_index)] end

Burimi: opennet.ru

Bleni hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera đŸ”„ Bli hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera | ProHoster