Hva er Cross-Site Scripting (XSS)?

Cross-Site Scripting (XSS) er en veldig utbredt sårbarhet som gjør det mulig for en hacker å legge inn ondsinnet kode (JavaScript) i din nettleser ved hjelp av en kompromittert webtjeneste. Angrepet kan gjennomføres på flere ulike måter. Du kan bli lurt til å klikke på en link (Reflected XSS), eller du kan laste ned angrepet automatisk dersom du besøker en webtjener som er infiltrert av den ondsinnede koden (Stored eller Persistent XSS).

Har du blitt plaget av et pop-up vindu i nettleseren din, som presenterer en link du må klikke på? Det er bare en av mange måter noen hackere viser at deres JavaScript (XSS) har kjørt i din Nettleser. Ikke la denne ene pop-upen lure deg - XSS er mye mer enn det du ser!

Hva kan hackere gjøre med XSS?

En hacker kan stjele dine "cookies", og logge inn i dine webtjenester som om de var deg!

De kan sende deg videre til en webtjener som er kompromittert (uten at du merker det) for å lure deg til å dele sensitiv informasjon som bank detaljer.

De kan lage falske innloggingssider til webtjeneren for å lure deg til å gi dem ditt brukernavn og passord.

De kan til og med bruke XSS til å omgå innebygde sikkerhetsmekanismer - både i webtjeneren og i din nettleser. Mekanismer som er der for å beskytte deg.

Det er nesten ikke grenser for hvordan XSS kan brukes. Kan det brukes til å kontrollere webkameraet ditt? Ja. Hva med å lytte på mikrofonen på datamaskinen din? Absolutt!

For avanserte angrep, ta en kikk på verktøyet The Browser Exploitation Framework (BeEF).

Hvem har blitt hacket med XSS?

Utvikleren av den meste populære webtjenerprogramvaren, The Apache Foundation, fikk sine servere infisert av et XSS angrep.

Ett XSS angrep på det offisielle forumet til Ubuntu, det populære Linux operativ systemet, medførte at hackere kunne laste ned brukernavn, e-post adresser og passord for 1,82 millioner brukere.

Vanligvis sikter XSS angrep seg inn på et programs brukere og deres lokale nettverk. Som vi ser i eksemplene over, kan hele webtjenere bli utsatt dersom tjenerens administrator blir mål for angrepet.

Daglig oppdages XSS sårbarheter i høyprofilsystemer som Facebook, Yahoo, Google, Twitter og mange andre, av uavhengige sikkerhetsforskere som deltar i bug bounty-programmer.

Dette er en liste over andre angrep som bruker XSS: https://www.google.com/fusiontables/DataSource?snapid=S1158702BBoV

Hvordan kan jeg beskytte meg selv mot XSS?

Det er veldig viktig at din nettleser er oppdatert, og at alle nettleserens sikkerhetssystemer er skrudd på. Ett slikt system er Cross-Site Scripting (XSS) filteret. Dersom du bruker en nettleser som ikke har et innebygget XSS-filter, slik som Firefox, kan du laste ned et XSS-filter add-on slik som NoScript.

Vær veldig forsiktig med hva du klikker på! En lenke kan se uskyldig nok ut, men kan likevel inneholde ondsinnet XSS kode.

Pass på å logge ut av hjemmesider når du er ferdig med å bruke dem. Det gjør det vanskeligere for hackere å stjele dine 'cookies' med dine detaljer i.

Den tekniske delen! Hvordan kan jeg sikre min webapplikasjon mot XSS?

Cross-Site Scripting skjer når en applikasjon ikke kontrollerer input før den sendes til en nettleser. For å sikre seg mot at dette skjer må applikasjonen kontrollere input, og vaske informasjonen for skadelig / kjørbar kode.

Tenk deg eksemplet der du ber om at en bruker skriver inn brukernavnet sitt, og når det er gjort viser du det som er skrevet i nettleseren. Dersom du gjør dette uten å vaske koden, hva vil kunne skje dersom brukeren skriver inn HTML-kode i stedet for sitt brukernavn? Nettleseren er ikke i stand til å vite hva som er brukernavn, og hva som er sidens faktiske HTML. Data (brukernavnet) blir blandet med kode (HTML)! Denne praksisen kan tillate en bruker å logge inn med et brukernavn som inneholder skadelig JavaScript, og få nettleseren til å kjøre koden som om det var endel av din webapplikasjon.

Pass derfor på at du vasker brukernavnet før du bruker det. Dersom du ber om at brukernavn kun skal inneholde alfanumeriske verdier, bør du sjekke at det som skrives inn (eller sendes til serveren) faktisk kun innholder alfanumeriske tegn. Du kan også hviteliste brukernavn, dvs å sammenligne brukernavnet med en liste over "godkjente" mønstre.

Bruk korrekt encoding. Dersom brukernavnet skal brukes i en HTML-kontekst, pass på å fortelle nettleseren din at brukernavnet, og tegnene det består av, skal tolkes som HTML. På den måten forstår nettleseren hvordan informasjonen skal brukes, og vises. Dersom du bruker ulike kontekster, er det viktig å fortelle hvilke kontekst dataen skal brukes som. For mer informasjon om kontekst og encoding: se flere linker nedenfor!

Sjekk din applikasjon for XSS sårbarheter. Det finnes mange webapplikasjonsskannere som oppdager sårbarheter knyttet til XSS i webapplikasjoner. En du kan prøve er Open Source skanneren OWASP ZAP.

Du kan også flagge din sesjonscookie til HttpOnly. Dette forteller din nettleser at cookien ikke skal gis tilgang fra JavaScript, og beskytter derfor dine brukere mot sesjonstyveri.

Din webtjener kan sende en HTTP-header som kalles Content Security Policy (CSP) for å fortelle din nettleser både hvilke JavaScript som er tillatt, og hvor de kan bli kjørt fra. Denne policien bruker hvitelisting.

Ikke minst kan du installere en Web Application Firewall (WAF), slik som Open Source mod_security! En WAF vil gi din applikasjon et ekstra lag av forsvar mot angrep. Det er viktig å huske at en WAF er best brukt som en del av et sikkerhetsscenario, og ikke som det eneste sikkerhetstiltaket du gjør!

Hvor kan jeg finne mer informasjon?

Det finnes mange flere typer av XSS enn de vi har sett på i denne artikkelen (Reflected og Stored). Du finner mye mer informasjon om dette temaet på Open Web Application Security Project (OWASP). Dette prosjektet inneholder mye informasjon om sikkerhet for webapplikasjoner.

Sjekk OWASP sin Wiki-artikkel om XSS, eller deres XSS Prevention Cheat Sheet. Du finner mye interesant informasjon om sårbarheter for webapplikasjoner på OWASP Top 10-listen!

Takk for at du leste denne artikkelen,
Ryan Dewhurst & Thomas MacKenzie

---

Målet med denne siden er å gjøre ting enkelt, og bruke et språk som er enkelt, kort og lettfattelig.

Siden er inspirert av http://justinjackson.ca/words.html

---

Thanks to Kai Roer for this translation. English version here.