Verkeerde configuratie van de beveiliging
Eén CORS-instelling en elke site kan het account lezen.
Wat is Verkeerde configuratie van de beveiliging?
De code is correct en de API is nog steeds onveilig, omdat een beveiligingsrelevante instelling in een gevaarlijke toestand blijft. Deze is CORS: de API weerspiegelt de Origin die een beller naar Access-Control-Allow-Origin stuurt en stelt Access-Control-Allow-Credentials in op true, waardoor browsers worden geïnformeerd dat elke site zijn antwoorden kan lezen met de sessiecookie van de bezoeker. U bewapent een beloningspagina die de reactie van de account-API naar uw server verzendt en beperkt vervolgens de toegestane oorsprong tot een expliciete lijst op de server. Als u het opnieuw afspeelt, blijkt dat CORS wordt afgedwongen door de browser, niet door de server.
Wat je leert in Verkeerde configuratie van de beveiliging
- Herken onjuiste beveiligingsconfiguratie in een API: een beveiligingsrelevante instelling die onveilig is gelaten, zoals een te tolerant CORS-beleid, uitgebreide fouten, foutopsporingsvlaggen of standaardconfiguratie
- Begrijp waarom het weergeven van het verzoek Origin in Access-Control-Allow-Origin en het toestaan van inloggegevens ervoor zorgt dat elke site die een ingelogde gebruiker bezoekt zijn of haar account kan lezen met de sessiecookie eraan toegevoegd
- Zie hoe een aanvaller de verkeerde configuratie met één enkel verzoek bewijst en vervolgens een gewoon ogende pagina bewapent, zodat een slachtoffer alleen maar een link hoeft te openen om zijn account cross-origin te laten lekken
- Maak onderscheid tussen defecte autorisatie op objectniveau (een ontbrekende eigendomscontrole per record) en overmatige gegevensblootstelling (te vaak terugkerende velden); hier is de handler prima en de fout is de configuratie
- Pas de oplossing toe: beperk toegestane oorsprong tot een expliciete acceptatielijst aan de serverzijde, koppel nooit een gereflecteerde oorsprong of jokerteken aan inloggegevens en begrijp dat het een browser is, en niet de server, die CORS afdwingt
Verkeerde configuratie van de beveiliging — Trainingsstappen
-
Een browservriendelijke API
Corvexa is een app voor persoonlijke financiën: mensen koppelen hun bank en houden hun uitgaven bij, en de Corvexa-webapp leest hun account rechtstreeks vanuit de Corvexa-API in de browser. Vandaag richt Bob zich op Corvexa. Hij wil klantaccountgegevens die hij kan phishing en doorverkopen. Hij heeft zelf een wegwerp Corvexa-account en begint met de openbare ontwikkelaarsdocumentatie om te zien hoe de API wordt blootgesteld aan de browser.
-
Elke locatie is toegestaan
Eén kaart in de documentatie beschrijft hoe de API verzoeken van andere websites behandelt. Bob leest het aandachtig.
-
Vraag het als de site van de aanvaller
Bob herhaalt het verzoek dat zijn kwaadaardige pagina zal doen. Hij wijst een API-client naar het accounteindpunt en stelt, precies zoals een browser dat zou doen, de Origin -header in op zijn eigen site. Hij is ingelogd op zijn eigen Corvexa-account, dus het verzoek bevat een echte sessie. Het gaat hem niet om de tekst, maar om wat de API aan de browser vertelt dat het met het antwoord mag doen.
-
De API zegt ja
Bekijk de antwoordheaders die de API met het account heeft teruggestuurd.
-
De lokpagina
Bob bouwt een onschuldig ogende pagina die hij op zijn eigen site kan hosten: een Corvexa-beloningsbanner. Het wordt weergegeven in de browser aan de linkerkant; de bron is geopend in de editor aan de rechterkant. Op zichzelf doet het niets anders dan een $50-aanbieding tonen.
-
Bewapen de pagina
Nu voegt Bob de lading toe. De banner ziet er identiek uit als die van een bezoeker, maar de pagina zal stilletjes de account-API van Corvexa vanuit hun browser aanroepen en alles wat terugkomt naar zijn eigen server verzenden. Omdat de API zijn herkomst met inloggegevens mogelijk maakt, doet de cookie van de bezoeker de rest.
-
Hoe de diefstal werkt
De pagina toont nog steeds alleen de beloning voor een bezoeker. Bekijk wat het toegevoegde script doet op het moment dat een ingelogde Corvexa-klant het opent.
-
Stuur het aas
De val is klaar. Bob heeft alleen een ingelogde Corvexa-klant nodig om deze te openen, dus e-mailt hij de beloningslink naar een klant, verkleed als een echte Corvexa-promotie uit zijn lookalike-domein.
-
Een beloning in de inbox
U gebruikt Corvexa zelf en op dit moment bent u ingelogd op uw account in uw browser. Er komt een e-mail binnen met een $50 Corvexa-beloning. Het aanbod klinkt plausibel en de branding klopt.
-
Open de link
U klikt door om de beloning te claimen, zoals de meeste mensen zouden doen. De pagina wordt geopend in uw browser en bevat nog steeds uw live Corvexa-sessie.
Dekking van beveiligingsframeworks
OWASP API Top 10
- API8:2023 Security Misconfiguration
CWE
- CWE-942 Permissive Cross-domain Policy with Untrusted Domains
- CWE-1188 Initialization of a Resource with an Insecure Default
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security