FixVibe
Covered by FixVibehigh

CORS Pogrešna konfiguracija: Rizici pretjerano dopuštenih politika

Dijeljenje resursa sa više izvora (CORS) je mehanizam pretraživača dizajniran da olabavi Politiku istog porijekla (SOP). Iako je neophodna za moderne web aplikacije, nepravilna implementacija—kao što je ponavljanje zaglavlja Origin podnosioca zahtjeva ili stavljanje na bijelu listu 'null' porijekla—može dozvoliti zlonamjernim stranicama da eksfiltriraju privatne korisničke podatke.

CWE-942

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 Origin iz zahtjeva klijenta i vraćaju ga natrag u Access-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 null na bijelu listu, koje može biti pokrenuto preusmjerenim zahtjevima ili lokalnim datotekama, omogućavajući zlonamjernim web lokacijama da se maskiraju kao izvorište null da dobiju pristup [S2][S3].
  • Greške raščlanjivanja: Greške u podudaranju regularnih izraza ili nizova prilikom provjere valjanosti zaglavlja Origin mogu dozvoliti napadačima da koriste domene kao što je trusted-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-Origin iz zaglavlja Origin zahtjeva [S2]. Umjesto toga, uporedite porijeklo zahtjeva sa tvrdo kodiranom listom pouzdanih domena [S3].
  • Izbjegavajte 'null' porijeklo: Nikada nemojte uključivati null na svoju bijelu listu dozvoljenog porijekla [S2].
  • Ograničite vjerodajnice: Postavite Access-Control-Allow-Credentials: true samo 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 Origin robusna 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.