In English
cross-site-scripting

4 min • Sårbarhet • Artikel

30 april, 2021

Vad är cross-site scripting (XSS)?

Cross-Site Scripting (eller XSS) är en ganska svårbegriplig term för en typ av attack som riktar sig mot en webbsidas läsare. Målet för attacken är alltså inte själva webbservern, utan dess användare. Attacken går ut på att den attackerande parten försöker få sin fientliga kod att köra i användarens webbläsare. Medlet för att åstadkomma detta är en felaktigt byggd webbsida eller webbapplikation.

Den fientliga koden (det som här kallas ”script”) kan ta alla former av kod som en webbläsare tillåter att exekvera. JavaScript är vanligast, eftersom det stöds av praktiskt taget alla moderna webbläsare.

Målet med attacken är i regel att komma över användarrelaterad information, direkt eller indirekt. XSS-sårbarheter är mycket nära relaterade till sårbarheter som bygger på s.k. code injections, som t.ex. SQL-injections.

Hur går en XSS-attack till?

För att en XSS-attack skall gå att genomföra måste den sårbara webbapplikationen ha misslyckats med att isolera sin egen information från data som kommer från annat håll. Det kan handla om information som skickas med i begäran till webbservern, eller om information som tidigare matats in och lagrats i en databas, som t.ex. en kommentar till ett inlägg i ett användarforum.

Ett mycket enkelt exempel på en sårbar webbsida kan vara att visa ett felmeddelande. Det fasta innehållet på sidan säger t.ex.

<p>Ett fel har uppstått.</p>
<p>…</p>
<p>Försök igen, eller kontakta vår kundsupport för ytterligare information.</p>

I detta exempel representerar ”…” det faktiska felmeddelandet som tillhandahålls av den komponent i webbapplikationen som upptäcker felet, och anropar felmeddelandesidan t.ex. genom: http://www.minweb.com/error?msg=”Databasen gick inte att nå.”

Den här delen av innehållet är dynamiskt: det bestäms först när det faktiska anropet sker. En angripare kan då anropa…

http://www.minweb.com/error?msg=”</p><script>location = ”http://evil-web site.com”;</script><p>”

…i syfte att försöka dirigera om webbläsaren till en fientlig webbsida. Observera att innehållet i msg-strängen nu består av HTTP-kommandon och JavaScript-kod.

Om webbapplikationen inte lyckas isolera msg-strängen från det övriga innehållet på sidan kommer resultatet att bli:

<p>Ett fel har uppstått.</p>
<p></p><script>location = ”http://evil-website.com”;</script><p></p>
<p>Försök igen, eller kontakta vår kundsupport för ytterligare information.</p>

Angriparen behöver nu få användaren att följa länken med den fientliga msg-strängen. Det kan ske via ett epostmeddelande eller via en kommentar i sociala medier. Om källan verkar trovärdig, så är risken stor för att en användare följer länken.

Den fientliga webbsidan kan nu t.ex. visa ett formulär som säger att operationen misslyckats, och be användaren logga in på nytt, tillsammans med ett loginformulär. Om användare då loggar in avslöjar han både kontonamn och lösenord till den legitima webbapplikationen.

Grundproblemet i detta exempel är alltså att webapplikationen inte isolerar innehållet i msg- strängen från sidans övriga innehåll, utan att innehållet i msg-strängen tolkas för instruktioner som skall utföras. Denna bristande separering kan utnyttjas av angripare för attacker, t.ex. av den typ som visats ovan.

Hur förhindrar man att XSS-sårbarheter uppstår?

Webbsidan måste hålla isär det egna innehållet från innehåll som kommer någon annanstans ifrån och som inte går att lita på till hundra procent: till exempel innehåll som skrivs in i ett fält av en användare, eller som hämtas ur en databas där läsarkommentarer sparas, eller som hämtas från en länk som kanske skickats till offret i ett brev. Sådant innehåll måste betraktas som fientligt och behandlas därefter.

Webbutvecklaren måste därför identifiera externt innehåll, och sedan behandla det så att dess innehåll inte kan tolkas som kod. Olika utvecklingsplattformar göra detta mer eller mindre enkelt.

Ett penetrationstest eller en kodgranskning av en färdig webapplikation kan normalt identifiera om XSS-sårbarheter finns, men de förhindras bäst genom att konstruera webbapplikationen på ett korrekt sätt redan från början.

Ytterligare information

Open Web Application Security Project, vanligen känt som OWASP, har publicerat rekommendationer och anvisningar för hur XSS-sårbarheter förhindras, respektive hur kod- granskning eller testning bör genomföras.

Se https://www.owasp.org/index.php/XSS för ytterligare information

Det finns också böcker skrivna om XSS, som exempelvis:
Fogie et. al.: XSS Attacks: Cross Site Scripting Exploits and Defense Syngress, 2007

Kontakta oss

Vi erbjuder flera kontaktvägar och återkopplar så snart som möjligt. Har du känslig information ber vi dig att maila krypterat.