Impact
Een aanvaller kan gevoelige, geauthenticeerde gegevens stelen van gebruikers van een kwetsbare applicatie [S2]. Als een gebruiker een kwaadwillende website bezoekt terwijl hij is ingelogd bij de kwetsbare app, kan de kwaadwillende site cross-origin-verzoeken doen aan de API van de app en de antwoorden [S1][S2] lezen. Dit kan leiden tot de diefstal van privégegevens, waaronder gebruikersprofielen, CSRF-tokens of privéberichten [S2].
Oorzaak
CORS is een op HTTP-header gebaseerd mechanisme waarmee servers kunnen specificeren welke oorsprong (domein, schema of poort) de bronnen [S1] mag laden. Kwetsbaarheden ontstaan doorgaans wanneer het CORS-beleid van een server te flexibel is of slecht geïmplementeerd [S2]:
- Gereflecteerde Origin-header: Sommige servers lezen de
Origin-header van een clientverzoek en echoën deze terug in deAccess-Control-Allow-Origin(ACAO)-antwoordheader [S2]. Hierdoor heeft elke website effectief toegang tot de bron [S2]. - Verkeerd geconfigureerde jokertekens: Hoewel het jokerteken
*elke oorsprong toegang geeft tot een bron, kan het niet worden gebruikt voor verzoeken waarvoor inloggegevens nodig zijn (zoals cookies of autorisatieheaders) [S3]. Ontwikkelaars proberen dit vaak te omzeilen door de ACAO-header dynamisch te genereren op basis van het verzoek [S2]. - Whitelisting 'null': Sommige toepassingen zetten de oorsprong van
nullop de witte lijst, die kan worden geactiveerd door omgeleide verzoeken of lokale bestanden, waardoor kwaadwillende sites zich kunnen voordoen als eennull-oorsprong om toegang te krijgen tot [S2][S3]. - Parsingfouten: Fouten in regex- of tekenreeksmatching bij het valideren van de
Origin-header kunnen aanvallers in staat stellen domeinen zoalstrusted-domain.com.attacker.com[S2] te gebruiken.
Het is belangrijk op te merken dat CORS geen bescherming biedt tegen Cross-Site Request Forgery (CSRF) [S2].
Betonreparaties
- Gebruik een statische witte lijst: Vermijd het dynamisch genereren van de
Access-Control-Allow-Origin-header uit deOrigin-header [S2] van de aanvraag. Vergelijk in plaats daarvan de oorsprong van het verzoek met een hardgecodeerde lijst met vertrouwde domeinen [S3]. - Vermijd de 'null'-oorsprong: Neem
nullnooit op in uw witte lijst met toegestane oorsprongen [S2]. - Inloggegevens beperken: Stel
Access-Control-Allow-Credentials: truealleen in als dit absoluut noodzakelijk is voor de specifieke cross-origin-interactie [S3]. - Gebruik de juiste validatie: Als u meerdere oorsprongen moet ondersteunen, zorg er dan voor dat de validatielogica voor de
Origin-header robuust is en niet kan worden omzeild door subdomeinen of soortgelijke domeinen [S2].
Hoe FixVibe erop test
FixVibe bevat dit nu als een gated actieve controle. Na domeinverificatie verzendt active.cors API-verzoeken van dezelfde oorsprong met een synthetische aanvaller-oorsprong en beoordeelt CORS-antwoordheaders. Het rapporteert een weerspiegelde willekeurige oorsprong, CORS met jokertekens en wijd open CORS op niet-openbare API-eindpunten, terwijl ruis van openbare activa wordt vermeden.
