Cross-Site Scripting (XSS) is een type kwetsbaarheid welke zeer wijdverspreid is en welke toestaat een hacker(aanvaller) kwaadaardige code (JavaScript) in uw browser of kwetsbare webapplicatie te injecteren. De hacker kan op verschillende wijze kwaadaardige code injecteren. Deze kan u bijvoorbeeld op een link laten klikken (Reflected XSS), of wachten tot u een webpagina bezoekt waar reeds kwaadaardige code op geïnjecteerd is (Stored of Persistent XSS).
Die vervelende pop-up met het cijfer 1 in? Gewoon een manier waarop sommige mensen kunnen bewijzen dat de JavaScript (XSS) succesvol is uitgevoerd. Er kan echter meer aan de hand zijn dan een simpele pop-up, er komt veel meer kijken bij XSS.
Een hacker kan mogelijk uw 'cookies' stelen, zich voordoen als uzelf en inloggen op websites of programma's (applicaties)!
Ze kunnen u laten doorverwijzen naar een kwaadaardige website zonder dat u dit weet, bijvoorbeeld in een poging om login gegevens voor uw bank te stelen.
Ze kunnen valse login pagina's toevoegen aan de kwetsbare applicatie zodat u zou inloggen met uw gegevens en deze ook kunnen stelen.
Ze kunnen zelfs XSS gebruiken om andere beveiligingsmaatregelen te omzeilen welke zijn ingebouwd in de applicatie of in de browser.
De mogelijkheden zijn in feite zo goed als onbeperkt. Uw webcam overnemen en meekijken? Absoluut! Meeluisteren op uw microfoon? Geen probleem!
Voor geavanceerde aanvallen zie de Browser Exploitation Framework (BeEF) applicatie.
De Apache Foundation, de oprichters en onderhouders van één van de meest populaire webserver software online was initieel gecompromitteerd geweest door een XSS aanval.
Een XSS aanval op het officiële forum van het populaire Linux besturingssysteem, Ubuntu, heeft ervoor gezorgd dat hackers gebruikersnamen, e-mail adressen en wachtwoorden van zo'n 1.82 miljoen gebruikers hebben buitgemaakt.
XSS aanvallen gaan in de meeste gevallen focussen op de applicatie van de gebruiker en zijn lokale netwerk; hoewel er moet opgemerkt worden - zoals in de voorbeelden hierboven beschreven- dat als deze gebruikers ook administrators zijn, de webserver van de applicatie ook kwetsbaar is.
XSS kwetsbaarheden worden nog steeds ontdekt op Facebook, Yahoo, Google, Twitter en andere gerenommeerde websites op een dagelijkse basis door onafhankelijke security researchers die deelnemen in zogenaamde bug bounties.
Hierbij een lijst met nog andere hacks die gebruik maakten van XSS - https://www.google.com/fusiontables/DataSource?snapid=S1158702BBoV
Controleer dat uw browser up-to-date is en dat alle beveiligingsinstellingen aanstaan, zoals bijvoorbeeld Cross-Site Scripting (XSS) filtering. Indien uw specifieke browser geen XSS filter heeft, zoals bijvoorbeeld Firefox, dan kan u een XSS filter add-on downloaden genaamd NoScript.
Wees steeds voorzichtig op welke links u klikt. Een link kan er onschuldig uitzien, maar kan mogelijk kwaadaardige XSS code bevatten.
Log steeds uit of meld steeds af van websites wanneer uw werk of zaken op die website afgerond zijn. Op die manier is het moeilijker voor hackers om uw 'cookies' te stelen.
Cross-Site Scripting doet zich voor wanneer niet-vertrouwde invoer (input) ook uitvoer (output) is naar een webpagina zonder degelijke zuivering (sanitisation) en/of codering (encoding).
Een voorbeeld: indien een gebruiker zijn gebruikersnaam voorziet om in te loggen en u laat deze gebruikersnaam zien zonder deze te zuiveren/op te schonen of zonder codering, wat gebeurt er dan indien de gebruikersnaam HTML karakters bevat? De webbrowser zal het verschil niet kennen tussen deze gebruikersnaam en de geldige HTML code van die website. Data (de gebruikersnaam) wordt vermengd met code (de HTML)! Dit staat een gebruiker toe om in te loggen met een gebruikersnaam dat kwaadaardige JavaScript code bevat en uitgevoerd wordt in de browser, in de context van uw webapplicatie.
Zorg ervoor dat dat de gebruikersnaam opgezuiverd wordt voordat die gebruikt kan worden, bijvoorbeeld; indien gebruikers enkel alfanumerieke karakters mogen invullen als hun gebruikersnaam, maakt dit dan verplicht met het zuiveren van de invoer (input sanitisation). Gebruik een whitelist! Vergelijk de gebruikersnamen met bekende correcte namen, niet met bekende foutieve of kwaadaardige namen.
Gebruik de juiste codering! Indien de gebruikersnaam in HTML gebruikt gaat worden, codeer dan de HTML voor al de karakters van de gebruikersnaam. Op die manier zal de browser weten wat die dient uit te voeren als HTML en wat niet. Let op: niet alles draait om HTML codering! U dient ook te coderen voor de juiste uitvoer 'context'. Zie de links hieronder voor meer informatie.
Scan uw applicaties voor XSS problemen. Er zijn verschillende geautomatiseerde webapplicatie security scanners beschikbaar welke XSS problemen kunnen detecteren. U kan bijvoorbeeld het Open Source project OWASP ZAP proberen.
Stel session cookies in met de HttpOnly flag. Dit zegt tegen de browser dat JavaScript geen toegang heeft tot de cookie(s), dit helpt om uw gebruikers tegen het stelen van een sessie (session hijacking) te beschermen.
Een HTTP header genaamd Content Security Policy (CSP) kan ingesteld worden op de webserver, waardoor aan de browser wordt doorgegeven van waar - en welke - JavaScript is toegestaan om uit te voeren. De CSP gebruikt een whitelist!
Tot slot, waarom zou u geen Web Application Firewall (WAF) installeren? Een voorbeeld is de Open Source mod_security tool. Een WAF zal uw applicatie een extra laag van bescherming bieden tegen die aanvallers, maar dient in gebruik genomen te worden in een scenario van uitgebreide bescherming en dient dus niet als enige oplossing aangezien een omweg (bypass) steeds gevonden kan worden.
De twee soorten aanvallen van XSS vermeld in dit artikel (Reflected en Stored) zijn niet de enige! We hebben slechts kort dit onderwerp aangesneden. Geïnteresseerd om dit verder te bekijken?
De Open Web Application Security Project (OWASP) is een uitstekende bron van informatie voor alles gerelateerd met de beveiliging van webapplicaties. Lees zeker hun wiki artikel over XSS of hun XSS Prevention Cheat Sheet. Voor informatie omtrent andere soorten van webapplicatie kwetsbaarheden kan u een kijkje nemen naar de OWASP TOP 10.
Bedankt voor uw aandacht,
Ryan Dewhurst & Thomas MacKenzie
---
De doelstellingen van dit artikel zijn om het simpel, kort en accuraat te houden, alsook duidelijk Nederlands te gebruiken.
Het design van deze pagina is geïnspireerd door http://justinjackson.ca/words.html
---
Thanks to @bartblaze for this translation. English version here.