Cross-Site Scripting (XSS) is een kwetsbaarheid in een website of app, waarmee een hacker de interacties van een gebruiker met de website of app kan compromitteren. De hacker doet dit door een kwaadaardig script in een vertrouwde website te injecteren. De kwaadaardige code wordt uitgevoerd wanneer het slachtoffer de website of toepassing gebruikt, met alle gevolgen vandien. Lees verder om te leren hoe cross-site scripting werkt, welke soorten aanvallen er zijn en wat je kunt doen om XSS te voorkomen.
Inhoud
Cross-site scripting, meestal XSS genoemd, is een cyberaanval waarbij hackers schadelijke code in een website of applicatie injecteren, met als doel deze in de browser van het slachtoffer uit te voeren.
De aanvaller injecteert de code via invoervelden. Populaire doelwitten voor XSS-aanvallen zijn daarom websites of apps waar gebruikers zelf input in kunnen voeren, bijvoorbeeld via een zoekfunctie, formulier of message board. Als de website de input in invoervelden niet goed valideert, wordt de kwaadaardige code teruggestuurd en in de browser van het slachtoffer uitgevoerd. Een succesvolle XSS-aanval kan leiden tot het overnemen van gebruikersaccounts, het stelen van persoonlijke of financiële gegevens of de installatie van malware.
Cross site-scripting verwees oorspronkelijk alleen naar JavaScript, maar XSS-aanvallen kunnen met elke client-side programmeertaal worden uitgevoerd, zoals ActiveX, Flash en HTML.
Cross-site scripting werkt door een kwetsbare website zo te manipuleren dat deze kwaadaardige code terugstuurt naar gebruikers. Deze kwaadaardige code wordt ingevoerd in velden die gebruikersinput toestaan, zoals zoekfuncties, commentaarvelden of formulieren.
Voor XSS-aanvallen worden client-side programmeertalen gebruikt, zoals JavaScript, die grote controle over een site kunnen uitoefenen. Een aanvaller kan JavaScript-code met scripttags invoegen in een invoerveld op de website, waarna de website het script uitvoert in de browser van het slachtoffer. Op deze manier kan een aanvaller vertrouwelijke informatie stelen en zelfs de account van de gebruiker overnemen.
Een typische XSS-aanval bestaat uit twee fases:
1. Om schadelijke JavaScript-code in de browser van een slachtoffer uit te voeren, moet een aanvaller eerst een manier vinden om kwaadaardige code (payload) te injecteren in een webpagina die het slachtoffer bezoekt.
2. Daarna moet het slachtoffer de webpagina met de kwaadaardige code bezoeken. Als de aanval op een bepaald persoon is gericht, kan de aanvaller social engineering en/of phishing gebruiken om een schadelijke URL naar het slachtoffer te sturen.
Cross-site scripting kan voorkomen wanneer aanvallers de kans hebben om kwaadaardige code in een website te injecteren. Een webpagina of toepassing is kwetsbaar voor XSS als de invoer van de gebruiker niet gecontroleerd of gevalideerd wordt, maar rechtstreeks in de gegenereerde output terechtkomt. Hierdoor wordt de code als het ware in de code van de website zelf opgenomen, waardoor deze zeer moeilijk detecteerbaar is. Vervolgens wordt de code tijdens websitebezoek of appgebruik in de browser van nietsvermoedende gebruikers uitgevoerd.
Jammer genoeg is er geen wondermiddel om XSS in webtoepassingen op te sporen. In plaats daarvan vereist het vinden van XSS-kwetsbaarheden een combinatie van menselijke inspanning (handmatige codecontrole) en technologische ondersteuning (geautomatiseerde code scanning tools).
Dit zijn de meestvoorkomende XSS-aanvallen:
Reflected XSS is de meest voorkomende en eenvoudigste vorm van XSS. Het ontstaat wanneer een gebruiker een HTTP-verzoek naar de server van een website stuurt en deze input op een onveilige manier in het antwoord naar de gebruiker worden opgenomen. Het kwaadaardige script wordt op het scherm van het slachtoffer weergegeven als een foutmelding of een zoekresultaat.
Omdat het lijkt alsof de foutmelding of zoekresultaten door de vertrouwde website worden gegenereerd, klik je nietsvermoedend op de prompt of link. Hierdoor wordt het kwaadaardige script van de aanvaller in de browser van de gebruiker uitgevoerd Nu kan het script elke actie uitvoeren en alle gegevens opvragen waartoe de gebruiker toegang heeft.
Een Persistent XSS (of Stored XSS)-aanval is mogelijk wanneer een website of toepassing gebruikersinvoer opslaat en dit aan andere gebruikers toont. Een toepassing is kwetsbaar als de gebruikersinvoer niet wordt gevalideerd voordat de inhoud wordt opgeslagen en in een HTML-responspagina’s wordt opgenomen.
Een voorbeeld hiervan is een blog waarop gebruikers reacties kunnen achterlaten die aan andere gebruikers worden getoond. De payload wordt automatisch aan gebruikers voorgeschoteld die de website bezoeken en in hun browser uitgevoerd. Ze hoeven hiervoor niet eerst op een kwaadaardige link te klikken. Dit wordt als het schadelijkste type XSS-aanval gezien, omdat het gebruikers op grote schaal kan treffen.
Een DOM Based XSS-aanval wordt aan de clientzijde uitgevoerd na het laden van de pagina. DOM staat voor Document Object Model en geeft gebruikers toegang tot de inhoud, structuur en stijl van een webpagina zonder interactie met de server. Daarnaast bevat het DOM van een webpagina informatie over eigenschappen als de pagina-URL en meta-informatie.
Een DOM Based XSS-aanval wordt ook uitgevoerd door een slachtoffer ertoe te verleiden op een schadelijke URL te klikken. In tegenstelling tot alle andere soorten cross-site scripting is DOM-gebaseerde XSS puur een kwetsbaarheid aan de clientzijde. Dit betekent dat de payload de server nooit bereikt en de hele aanval in de webbrowser plaatsvindt. Hierdoor is het zeer moeilijk om een DOM XSS-aanval te detecteren. DOM-objecten die vaak worden gebruikt als locatie van kwaadaardige invoer zijn onder andere document.URL, document.referrer en location.search.
De impact van een XSS-aanval hangt af van de aard van het script, de effectiviteit ervan en de status van de gecompromitteerde gebruiker. Dit zijn een aantal schadelijke acties waar een XSS-aanval toe kan leiden:
Met een XSS-aanval kunnen hackers sessiecookies in de browser stelen om legitieme gebruikersaccounts te kapen. Zodra de aanvaller de sessie-ID van de gebruiker in handen heeft, kan hij zich voordoen als de gebruiker en kan hij alles doen waartoe de gebruiker op het netwerk gemachtigd is.
Sessiekaping is vaak gericht op specifieke personen. Als een cybercrimineel de sessiecookies van een administratief account weet te stelen, heeft hij algemene toegang tot de gehele applicatie of website.
Persoonlijke informatie is altijd een gewild doelwit. Aanvallers gebruiken specifieke scripts om gevoelige gegevens, zoals sofi-nummers, persoonlijk identificeerbare informatie (PII) of creditcardgegevens te exfiltreren en hier hun voordeel mee te doen.
Zodra de aanvaller toegang heeft tot de persoonlijke of gevoelige informatie van gebruikers, kan hij banktransacties uitvoeren, losgeld eisen van een organisatie om de gegevens te wissen of de informatie op het dark web verkopen.
Website defacement is een aanval waarbij hackers een website binnendringen en de inhoud van de site vervangen door hun eigen inhoud. Als gevolg van deze sabotage worden vaak niet alleen de diensten verstoord, maar worden gebruikers ook omgeleid naar andere websites die zijn opgezet om hun apparaten met malware te infecteren.
Om je een idee te geven van de (potentiële) schade die cross-site scripting aan kan richten, hebben we een paar incidenten op een rijtje gezet:
Gebruik NordVPN’s Threat Protection om schadelijke websites te blokkeren en Dark Web Monitor om je digitale veiligheid te verbeteren.
De beste manier om te voorkomen dat je slachtoffer van een XSS-aanval wordt, is door jezelf goed te informeren. Leer tekenen van gevaar te herkennen voordat je per ongeluk schadelijke code uitvoert. Dit zijn enkele tips om XSS te voorkomen:
Volg deze tips om te voorkomen dat je slachtoffer van een XSS-aanval wordt:
Ben je verantwoordelijk voor de beveiliging binnen een bedrijf? Neem deze voorzorgsmaatregelen om XSS te voorkomen:
Als je webontwikkelaar of eigenaar van een website bent, kun je de volgende maatregelen nemen:
Online beveiliging begint met een klik.
Blijf veilig met ‘s werelds toonaangevende VPN