FixVibe
Covered by FixVibehigh

CORS Pogrešna konfiguracija: Rizici pretjerano popustljivih pravila

Dijeljenje izvora s različitim podrijetlima (CORS) je mehanizam preglednika koji je osmišljen za ublažavanje pravila istog podrijetla (SOP). Iako je neophodna za suvremene web-aplikacije, nepravilna implementacija—kao što je ponavljanje zaglavlja Izvora zahtjevatelja ili stavljanje 'nultog' porijekla na popis dopuštenih—može dopustiti zlonamjernim web-lokacijama eksfiltraciju privatnih korisničkih podataka.

CWE-942

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 Origin zaglavlje iz zahtjeva klijenta i ponavljaju ga natrag u Access-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 null na popis dopuštenih, što se može pokrenuti preusmjerenim zahtjevima ili lokalnim datotekama, dopuštajući zlonamjernim web-lokacijama da se maskiraju u izvorište null kako bi dobile pristup [S2][S3].
  • Pogreške raščlambe: Pogreške u podudaranju regularnog izraza ili niza prilikom provjere Origin zaglavlja mogu dopustiti napadačima da koriste domene kao što je trusted-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-Origin iz zaglavlja Origin zahtjeva [S2]. Umjesto toga, usporedite porijeklo zahtjeva s tvrdo kodiranim popisom pouzdanih domena [S3].
  • Izbjegavajte 'nulto' podrijetlo: Nikada nemojte uključivati null na popis dopuštenih izvora [S2].
  • Ograničite vjerodajnice: Access-Control-Allow-Credentials: true postavite 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 Origin robusna 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.