Utjecaj
Napadač može ukrasti osjetljive, provjerene podatke od korisnika ranjive aplikacije [S2]. Ako korisnik posjeti zlonamjerno web-mjesto dok je prijavljen u ranjivu aplikaciju, zlonamjerno web-mjesto može uputiti zahtjeve unakrsnog porijekla API aplikacije i pročitati odgovore [S1][S2]. To može dovesti do krađe privatnih podataka, uključujući korisničke profile, CSRF tokene ili privatne poruke [S2].
Glavni uzrok
CORS je mehanizam temeljen na HTTP zaglavlju koji omogućuje poslužiteljima da specificiraju kojim izvorima (domena, shema ili port) je dopušteno učitavanje resursa [S1]. Ranjive točke obično nastaju kada je CORS politika poslužitelja previše fleksibilna ili loše implementirana [S2]:
- Reflected Origin Header: Neki poslužitelji čitaju
Originzaglavlje iz zahtjeva klijenta i ponavljaju ga natrag uAccess-Control-Allow-Origin(ACAO) zaglavlju odgovora [S2]. Ovo učinkovito omogućuje bilo kojoj web stranici da pristupi resursu [S2]. - Pogrešno konfigurirani zamjenski znakovi: Iako
*zamjenski znak dopušta bilo kojem izvoru pristup resursu, ne može se koristiti za zahtjeve koji zahtijevaju vjerodajnice (poput kolačića ili zaglavlja za autorizaciju) [S3]. Programeri to često pokušavaju zaobići dinamičkim generiranjem ACAO zaglavlja na temelju zahtjeva [S2]. - Popis dopuštenih 'null': Neke aplikacije stavljaju izvorište
nullna popis dopuštenih, što se može pokrenuti preusmjerenim zahtjevima ili lokalnim datotekama, dopuštajući zlonamjernim web-lokacijama da se maskiraju u izvorištenullkako bi dobile pristup [S2][S3]. - Pogreške raščlambe: Pogreške u podudaranju regularnog izraza ili niza prilikom provjere
Originzaglavlja mogu dopustiti napadačima da koriste domene kao što jetrusted-domain.com.attacker.com[S2].
Važno je napomenuti da CORS nije zaštita od Cross-Site Request Forgery (CSRF) [S2].
Konkretni popravci
- Koristite statičnu listu dopuštenih: Izbjegavajte dinamičko generiranje zaglavlja
Access-Control-Allow-Originiz zaglavljaOriginzahtjeva [S2]. Umjesto toga, usporedite porijeklo zahtjeva s tvrdo kodiranim popisom pouzdanih domena [S3]. - Izbjegavajte 'nulto' podrijetlo: Nikada nemojte uključivati
nullna popis dopuštenih izvora [S2]. - Ograničite vjerodajnice:
Access-Control-Allow-Credentials: truepostavite samo ako je apsolutno neophodno za specifičnu interakciju između izvora [S3]. - Koristite odgovarajuću provjeru valjanosti: Ako morate podržati više izvora, osigurajte da je logika provjere valjanosti za zaglavlje
Originrobusna i da je ne mogu zaobići poddomene ili domene sličnog izgleda [S2].
Kako FixVibe to testira
FixVibe sada uključuje ovo kao zatvoreni aktivni ček. Nakon verifikacije domene, active.cors šalje API zahtjeve istog porijekla sa sintetičkim napadačkim porijeklom i pregledava CORS zaglavlja odgovora. Izvješćuje o reflektiranom proizvoljnom podrijetlu, CORS s vjerodajnicama sa zamjenskim znakovima i široko otvorenom CORS na nejavnim krajnjim točkama API uz izbjegavanje buke javnih sredstava.
