Impact
Un atacator poate fura date sensibile și autentificate de la utilizatorii unei aplicații vulnerabile [S2]. Dacă un utilizator vizitează un site web rău intenționat în timp ce este conectat la aplicația vulnerabilă, site-ul rău intenționat poate face cereri de origine încrucișată către API al aplicației și poate citi răspunsurile [S1][S2]. Acest lucru poate duce la furtul de informații private, inclusiv profiluri de utilizator, jetoane CSRF sau mesaje private [S2].
Cauza fundamentală
CORS este un mecanism bazat pe antet HTTP care permite serverelor să specifice ce origini (domeniu, schemă sau port) au permisiunea de a încărca resurse [S1]. Vulnerabilitățile apar de obicei atunci când politica CORS a unui server este prea flexibilă sau implementată prost [S2]:
- Antet de origine reflectată: Unele servere citesc antetul
Origindintr-o solicitare a clientului și îl redau în antetul de răspunsAccess-Control-Allow-Origin(ACAO) [S2]. Acest lucru permite efectiv oricărui site web să acceseze resursa [S2]. - Caractere mânerele configurate greșit: În timp ce caracterul mâner
*permite oricărei origini să acceseze o resursă, acesta nu poate fi utilizat pentru solicitări care necesită acreditări (cum ar fi module cookie sau anteturi de autorizare) [S3]. Dezvoltatorii încearcă adesea să ocolească acest lucru prin generarea dinamică a antetului ACAO pe baza solicitării [S2]. - Includerea pe lista albă „null”: Unele aplicații includ originea
null, care poate fi declanșată de solicitări redirecționate sau de fișiere locale, permițând site-urilor rău intenționate să se mascheze ca originenullpentru a obține acces - Erori de analiză: greșelile de regex sau potrivirea șirurilor la validarea antetului
Originpot permite atacatorilor să folosească domenii precumtrusted-domain.com.attacker.com[S2].
Este important de reținut că CORS nu este o protecție împotriva falsificării cererilor între site-uri (CSRF) [S2].
Remedieri concrete
- Utilizați o listă albă statică: evitați generarea dinamică a antetului
Access-Control-Allow-Origindin antetulOrigin[S2] al solicitării. În schimb, comparați originea cererii cu o listă codificată de domenii de încredere [S3]. - Evitați originea „nulă”: Nu includeți niciodată
nullîn lista albă de origini permise [S2]. - Restricționați acreditările: setați
Access-Control-Allow-Credentials: truenumai dacă este absolut necesar pentru interacțiunea specifică între origini [S3]. - Utilizați validarea corectă: Dacă trebuie să acceptați mai multe origini, asigurați-vă că logica de validare pentru antetul
Origineste robustă și nu poate fi ocolită de subdomenii sau domenii similare [S2].
Cum testează FixVibe pentru aceasta
FixVibe include acum acest lucru ca verificare activă cu blocare. După verificarea domeniului, active.cors trimite cereri de aceeași origine API cu o origine sintetică a atacatorului și examinează anteturile de răspuns CORS. Raportează origini arbitrare reflectate, CORS cu acreditări wildcard și CORS larg deschis pe puncte finale API non-publice evitând în același timp zgomotul bunurilor publice.
