Impact
Napadač može ukrasti osjetljive, provjerene podatke od korisnika ranjive aplikacije [S2]. Ako korisnik posjeti zlonamjernu web lokaciju dok je prijavljen na ranjivu aplikaciju, zlonamjerna stranica može uputiti zahtjeve s više izvora na API aplikacije i pročitati odgovore [S1][S2]. To može dovesti do krađe privatnih informacija, uključujući korisničke profile, CSRF tokene ili privatne poruke [S2].
Osnovni uzrok
CORS je mehanizam zasnovan na HTTP zaglavlju koji omogućava serverima da specificiraju koje porijeklo (domen, šema ili port) je dozvoljeno za učitavanje resursa [S1]. Ranjivosti obično nastaju kada je politika CORS servera previše fleksibilna ili loše implementirana [S2]:
- Reflected Origin Header: Neki serveri čitaju zaglavlje
Originiz zahtjeva klijenta i vraćaju ga natrag uAccess-Control-Allow-Origin(ACAO) zaglavlje odgovora [S2]. Ovo efektivno omogućava bilo kojoj web stranici da pristupi resursu [S2]. - Pogrešno konfigurisani zamjenski znakovi: Dok zamjenski znak
*dozvoljava bilo kojem porijeklu da pristupi resursu, ne može se koristiti za zahtjeve koji zahtijevaju vjerodajnice (kao što su kolačići ili zaglavlja autorizacije) [S3]. Programeri često pokušavaju da zaobiđu ovo dinamičkim generisanjem ACAO zaglavlja na osnovu zahteva [S2]. - Stavljanje na bijelu listu 'null': Neke aplikacije navode izvorište
nullna bijelu listu, koje može biti pokrenuto preusmjerenim zahtjevima ili lokalnim datotekama, omogućavajući zlonamjernim web lokacijama da se maskiraju kao izvorištenullda dobiju pristup [S2][S3]. - Greške raščlanjivanja: Greške u podudaranju regularnih izraza ili nizova prilikom provjere valjanosti zaglavlja
Originmogu dozvoliti napadačima da koriste domene kao što jetrusted-domain.com.attacker.com[S2].
Važno je napomenuti da CORS nije zaštita od krivotvorenja zahtjeva na više lokacija (CSRF) [S2].
Betonski popravci
- Koristite statičku bijelu listu: Izbjegnite dinamičko generiranje zaglavlja
Access-Control-Allow-Originiz zaglavljaOriginzahtjeva [S2]. Umjesto toga, uporedite porijeklo zahtjeva sa tvrdo kodiranom listom pouzdanih domena [S3]. - Izbjegavajte 'null' porijeklo: Nikada nemojte uključivati
nullna svoju bijelu listu dozvoljenog porijekla [S2]. - Ograničite vjerodajnice: Postavite
Access-Control-Allow-Credentials: truesamo ako je apsolutno neophodno za specifičnu interakciju između porijekla [S3]. - Koristite odgovarajuću provjeru valjanosti: Ako morate podržati višestruko porijeklo, osigurajte da je logika validacije za zaglavlje
Originrobusna i da ga poddomeni ili domeni sličnog izgleda [S2] ne mogu zaobići.
Kako FixVibe testira za to
FixVibe sada uključuje ovo kao aktivnu provjeru sa ograničenjem. Nakon verifikacije domena, active.cors šalje API zahtjeve istog porijekla sa sintetičkim porijeklom napadača i pregleda CORS zaglavlja odgovora. Izvještava o proizvoljnom porijeklu, CORS i široko otvorenim CORS na nejavnim krajnjim tačkama API uz izbjegavanje buke javnih sredstava.
