Vpliv
Napadalec lahko ukrade občutljive, overjene podatke od uporabnikov ranljive aplikacije [S2]. Če uporabnik obišče zlonamerno spletno mesto, medtem ko je prijavljen v ranljivo aplikacijo, lahko zlonamerno spletno mesto pošlje navzkrižne zahteve API aplikacije in prebere odgovore [S1][S2]. To lahko vodi do kraje zasebnih podatkov, vključno z uporabniškimi profili, žetoni CSRF ali zasebnimi sporočili [S2].
Temeljni vzrok
CORS je mehanizem, ki temelji na glavi HTTP in omogoča strežnikom, da določijo, katerim izvorom (domena, shema ali vrata) je dovoljeno nalaganje virov [S1]. Ranljivosti se običajno pojavijo, ko je pravilnik CORS strežnika preveč prilagodljiv ali slabo implementiran [S2]:
- Reflected Origin Header: Nekateri strežniki preberejo glavo
Originiz zahteve odjemalca in jo ponovijo nazaj v glavi odgovoraAccess-Control-Allow-Origin(ACAO) [S2]. To dejansko omogoča kateremu koli spletnemu mestu dostop do vira [S2]. - Napačno konfigurirani nadomestni znaki: Čeprav nadomestni znak
*dovoljuje kateremu koli izvoru dostop do vira, ga ni mogoče uporabiti za zahteve, ki zahtevajo poverilnice (kot so piškotki ali avtorizacijske glave) [S3]. Razvijalci pogosto poskušajo to zaobiti z dinamičnim generiranjem glave ACAO na podlagi zahteve [S2]. - Dodajanje na seznam dovoljenih 'null': Nekatere aplikacije dodajo izvor
nullna beli seznam, ki ga lahko sprožijo preusmerjene zahteve ali lokalne datoteke, kar omogoča zlonamernim mestom, da se zamaskirajo kot izvornullin pridobijo dostop [S2][S3]. - Napake pri razčlenjevanju: Napake pri ujemanju regularnega izraza ali niza pri preverjanju glave
Originlahko napadalcem omogočijo uporabo domen, kot jetrusted-domain.com.attacker.com[S2].
Pomembno je omeniti, da CORS ni zaščita pred ponarejanjem zahtev med spletnimi mesti (CSRF) [S2].
Betonski popravki
- Uporabite statični beli seznam: Izogibajte se dinamičnemu ustvarjanju glave
Access-Control-Allow-Originiz glaveOriginzahteve [S2]. Namesto tega primerjajte izvor zahteve s trdo kodiranim seznamom zaupanja vrednih domen [S3]. - Izogibajte se 'ničelnemu' izvoru:
nullnikoli ne vključite v dovoljeni seznam dovoljenih izvorov [S2]. - Omeji poverilnice:
Access-Control-Allow-Credentials: truenastavite samo, če je to nujno potrebno za določeno interakcijo navzkrižnega izvora [S3]. - Uporabite ustrezno preverjanje: Če morate podpirati več izvorov, zagotovite, da je logika preverjanja za glavo
Originrobustna in je ne morejo zaobiti poddomene ali podobne domene [S2].
Kako ga FixVibe testira
FixVibe to zdaj vključuje kot zaprti aktivni ček. Po preverjanju domene active.cors pošlje zahteve API istega izvora s sintetičnim izvorom napadalca in pregleda glave odgovorov CORS. Poroča o poljubnih izvorih, CORS z nadomestnimi znaki in široko odprtim CORS na nejavnih končnih točkah API, pri čemer se izogiba šumu javnih sredstev.
