Analiza incidenta: Cloudflare si je “pucao u nogu” i srušio četvrtinu globalnog prometa
Cloudflare, ključni akter u globalnoj internetskoj infrastrukturi, ponovno se našao u središtu skandala nakon što je pogrešna implementacija sigurnosne zakrpe dovela do masovnog prekida usluge. Incident je, umjesto kibernetičkog napada, bio rezultat pogrešnog pokušaja ublažavanja kritične ranjivosti, srušivši približno 28% cjelokupnog HTTP prometa koji tvrtka opslužuje.
U petak je web-promet milijuna korisnika preplavila poruka o interoj pogrešci poslužitelja (HTTP Error 500). CTO Cloudflarea, Dane Knecht, potvrdio je da je uzrok bio inženjerski autogol – ishitrena i netestirana zakrpa.
Kronologija katastrofe: Pogrešna logika obrade zahtjeva
Prekid je nastao tijekom napora Cloudflareovog tima da implementira promjene u logici obrade HTTP zahtjeva. Ove promjene bile su namijenjene detektiranju i ublažavanju novootkrivene ranjivosti koja cilja React Server komponente.
Namjera: Modificirati način na koji Cloudflareova mreža analizira dolazne zahtjeve kako bi proaktivno blokirala zlonamjerne pakete povezane s Flight protokolom.
Pogreška: Tim je nenamjerno stvorio tehnički problem u distribuiranom sustavu obrade zahtjeva. Nova logika se pokazala fatalno netočnom, uzrokujući da Cloudflareovi sustavi prestanu ispravno raditi za značajan broj korisnika.
Razmjeri štete: Prekid je pogodio 28% ukupnog HTTP prometa, što je izazvalo privremeni kolaps milijuna web stranica diljem svijeta. Čak je i sama Cloudflareova administratorska nadzorna ploča postala nedostupna.
Sanacija: Cloudflare je, srećom, relativno brzo uspio identificirati i povući problematičnu promjenu, te je usluga potpuno obnovljena unutar nekoliko sati.
React2Shell: Raniji uzrok globalne panike
Ozbiljnost i brzina Cloudflareove reakcije bila je motivirana kritičnom prirodom ranjivosti koju su pokušavali spriječiti: React2Shell (CVE-2025-55182).
- Kritičnost: Ova ranjivost je bila ocijenjena kao jedna od najozbiljnijih u godini i utjecala je na verzije React Server Components (RSC) od 19.0 do 19.2.0.
- Mehanizam napada: Suština leži u protokolu zvanom ‘Flight’ unutar RSC-a. Ranjivost je omogućavala neautentificiranom napadaču da pošalje zlonamjerne HTTP zahtjeve krajnjim točkama React Server Function, što je u konačnici moglo dovesti do preuzimanja potpune kontrole nad React i Next.js aplikacijama.
- Upozorenja: Prije Cloudflareovog incidenta, ugledne organizacije za kibernetičku sigurnost, uključujući NHS England, izdale su hitna upozorenja jer su se već pojavili proof-of-concept (dokaz koncepta) za exploit, naglašavajući da je uspješna eksploatacija u praksi gotovo sigurna.
Kontekst nepouzdanosti: Drugi incident u mjesec dana
Ovaj niz incidenata narušava reputaciju Cloudflarea kao pouzdane infrastrukture:
Prethodni globalni prekid: Samo mjesec dana ranije, tvrtka je doživjela dugotrajni globalni prekid koji je trajao gotovo šest sati, što je izvršni direktor Matthew Prince javno nazvao “najgorim incidentom od 2019. godine”.
Zero Trust Problemi: Ranije u godini, došlo je do velikog problema s uslugom Zero Trust WARP, što je uzrokovalo poteškoće s autentifikacijom i vezama u više regija, uključujući i ključne dijelove infrastrukture Google Clouda.
Zaključak za infrastrukturu: Ovaj najnoviji incident podsjeća globalnu tehnološku zajednicu da čak i pri najboljim namjerama – poput hitnog jačanja sigurnosti – brzo implementirane i nedovoljno testirane promjene u kritičnoj infrastrukturi mogu nanijeti daleko veću, trenutnu štetu nego ranjivost koju pokušavaju sanirati.
Tehnička analiza: React2Shell (CVE-2025-55182)
Ranjivost React2Shell nije standardni XSS (Cross-Site Scripting) problem, već se odnosi na fundamentalni mehanizam React Server Components (RSC) i način na koji klijent i poslužitelj komuniciraju.
1. Uloga Flight protokola
Flight protokol je interni, binarni komunikacijski format koji je razvio Meta (Facebook) za React. On je temelj RSC-a. To je mehanizam koji omogućuje poslužitelju (Server) da klijentu (Browser) pošalje hijerarhijski opis elemenata koje treba renderirati, bez potrebe za slanjem cijelog HTML-a ili gomile JavaScripta (JS). To značajno smanjuje opterećenje klijenta i ubrzava učitavanje. Flight protokol sadrži niz “instrukcija” (npr. ‘Renderiraj ovu komponentu’, ‘Koristi ovu prop-vrijednost’, ‘Pozovi ovu funkciju’). Flight protokol specificira točan format kako se referenciraju funkcije i moduli. Budući da Flight protokol dozvoljava poslužitelju da klijentu govori koje funkcije da pozove, ako napadač može injektirati vlastite “instrukcije” u taj tok, može natjerati poslužitelj da pozove opasne, neželjene funkcije na strani poslužitelja.
2. Mehanizam ranjivosti (React2Shell)
Ranjivost React2Shell iskorištava nesavršenosti u načinu na koji se ulazni podaci obrađuju i prosljeđuju kroz Flight protokol do krajnjih točaka React Server Function. Injekcija zlonamjernog koda nastaje zbog nesigurnog rukovanja ulaznim podacima (input sanitation) koji se serijaliziraju i deserijaliziraju unutar React Flight protokola. Napadač pronalazi ulaznu točku (npr. HTTP zahtjev) putem koje može proslijediti posebno oblikovanu poruku.
Zaobilaženje enkripcije/validacije: Ta poruka je konstruirana tako da izgleda kao validna Flight instrukcija, ali zapravo sadrži referencu na opasnu Server Function ili metodu sustava na poslužitelju.
Deserijalizacija i izvršavanje: Kada React Server pokuša deserijalizirati (dekodirati) ovu poruku i obraditi je, on automatski izvršava injektiranu instrukciju, misleći da je došla iz pouzdanog izvora.
Kontrola poslužitelja (RCE): U najgorem slučaju, ta instrukcija može uključivati poziv za izvršavanje proizvoljnog koda na poslužiteljskom operativnom sustavu, što rezultira udaljenim izvršavanjem koda (Remote Code Execution – RCE). Ovo napadaču daje potpunu kontrolu nad pogođenom React i Next.js aplikacijom.
3. Zašto je Cloudflare reagirao tako naglo?
Cloudflare nudi uslugu Web Application Firewall (WAF). Njegov tim je pokušao brzo implementirati pravilo u WAF koje bi pregledavalo dolazne HTTP zahtjeve i tražilo specifične zlonamjerne obrasce u serijaliziranim Flight porukama. Cilj je bio blokirati te zlonamjerne pakete prije nego što dođu do korisničkih aplikacija. Problem je nastao jer je implementirano WAF pravilo bilo previše agresivno ili tehnički netocno u interpretaciji Flight protokola, što je dovelo do toga da je Cloudflare blokirao značajan dio validnog, benignog prometa, uzrokujući masovne HTTP 500 pogreške. Ova ranjivost naglašava opasnosti korištenja novih, internih protokola koji nisu temeljito provjereni i koji dopuštaju izvršavanje koda (RCE) kao rezultat loše serijalizacije/deserijalizacije.
