Impacte
Un atacant pot robar dades confidencials i autenticades dels usuaris d'una aplicació vulnerable [S2]. Si un usuari visita un lloc web maliciós mentre està connectat a l'aplicació vulnerable, el lloc maliciós pot fer sol·licituds d'origen creuat al API de l'aplicació i llegir les respostes [S1][S2]. Això pot provocar el robatori d'informació privada, inclosos els perfils d'usuari, els testimonis CSRF o els missatges privats [S2].
Causa arrel
CORS és un mecanisme basat en capçaleres HTTP que permet als servidors especificar quins orígens (domini, esquema o port) es permeten carregar recursos [S1]. Les vulnerabilitats solen aparèixer quan la política CORS d'un servidor és massa flexible o està mal implementada [S2]:
- Capçalera de l'origen reflectit: Alguns servidors llegeixen la capçalera
Origind'una sol·licitud de client i la fan ressò a la capçalera de respostaAccess-Control-Allow-Origin(ACAO) [S2]. Això permet efectivament que qualsevol lloc web accedeixi al recurs [S2]. - Commodins mal configurats: tot i que el comodí
*permet que qualsevol origen accedeixi a un recurs, no es pot utilitzar per a sol·licituds que requereixin credencials (com ara galetes o capçaleres d'autorització) [S3]. Els desenvolupadors sovint intenten evitar-ho generant dinàmicament la capçalera ACAO basada en la sol·licitud [S2]. - Llista blanca 'nul': Algunes aplicacions inclouen a la llista blanca l'origen
null, que es pot activar per sol·licituds redirigits o fitxers locals, la qual cosa permet que els llocs maliciosos es dissimulin com un origennullper accedir a ZXCVFIXVIBETOKENTOKEN2CVIXVIXVIBETOKENTOKVZCV3CV3CV. - Errors d'anàlisi: Els errors en la concordança d'expressions regulars o de cadenes en validar la capçalera
Originpoden permetre als atacants utilitzar dominis comtrusted-domain.com.attacker.com[S2].
És important tenir en compte que CORS no és una protecció contra la falsificació de sol·licituds entre llocs (CSRF) [S2].
Correccions concretes
- Utilitzeu una llista blanca estàtica: Eviteu generar dinàmicament la capçalera
Access-Control-Allow-Origindes de la capçaleraOrigin[S2] de la sol·licitud. En lloc d'això, compareu l'origen de la sol·licitud amb una llista codificada de dominis de confiança [S3]. - Eviteu l'origen "nul": No inclogueu mai
nulla la vostra llista blanca d'orígens permesos [S2]. - Restringeix les credencials: només definiu
Access-Control-Allow-Credentials: truesi és absolutament necessari per a la interacció específica entre origens [S3]. - Utilitzeu la validació adequada: si heu de donar suport a diversos orígens, assegureu-vos que la lògica de validació de la capçalera
Originsigui sòlida i que no es pugui ometre els subdominis o dominis d'aspecte similar [S2].
Com ho prova FixVibe
FixVibe ara inclou això com a comprovació activa. Després de la verificació del domini, active.cors envia sol·licituds API del mateix origen amb un origen d'atacant sintètic i revisa les capçaleres de resposta CORS. Informa d'orígens arbitraris reflectits, CORS amb credencials comodís i CORS oberts en punts finals API no públics alhora que evita el soroll dels actius públics.
