Assemblix

Mikä on XSS?

Ilari Sani | 31.3.2008

Sampo Pankin uudesta verkkopankista löydetyt haavoittuvuudet ovat tuoneet ns. XSS-aukot julkisuuteen. Web-suunnittelija Mikael Korpela löysi yhdessä viikonlopussa tusinoittain haavoittuvuuksia suosituista suomalaisista verkkopalveluista.

XSS tarkoittaa lyhyesti, että hyökkääjä voi jotakin kautta lisätä sivuille koodia joka ei sinne kuulu. Näin voi tapahtua, jos käyttäjän kirjoittamaa tekstiä näytetään sivuilla eikä sitä suodateta.

Linkin avulla tapahtuvat XSS-hyökkäykset

Julkisuudessa esiintyneet haavoittuvuudet tapahtuvat muokkaamalla sivujen osoitteita. Otetaanpa esimerkiksi kuvitteellinen sivusto nimeltä example.com, jonka hakukoneessa on XSS-aukko.

Jos käyttäjä tekee haun sanalla "Aukko", osoite näyttää seuraavalta:

Hakusana näkyy osoitteessa parametrina. Web-palvelin lukee parametrin, tekee haun ja palauttaa tulossivun. Ongelma syntyy, jos parametri näytetään tulossivulla juuri sellaisena kuin se on osoitteeseen kirjoitettu.

Hyökkääjä voi kirjoittaa hakusanan tilalle omaa HTML-koodia, jonka palvelin uskollisesti näyttää sivulla. Esimerkissä hakusana on muutettu punaiseksi, mutta kyseessä voisi olla pahempikin töhriminen.

Jos hyökkääjä saa lisättyä sivulle JavaScript-koodia, hän saa sivun käytännössä haltuunsa. JavaScript-koodi voi esimerkiksi vakoilla käyttäjän tunnuksia ja lähettää ne hyökkääjälle.

Hyökkäys sähköpostin avulla

Tyypillisessä XSS-hyökkäyksessä käyttäjille lähetetään sähköpostia, jossa on hyökkääjän muokkaama linkki. Linkkiä klikkaamalla käyttäjä siirtyy sivulle, joka tulee asiaankuuluvalta palvelimelta ja näyttää tavalliselta. Palvelin toimii kuitenkin tietämättään hyökkääjän apulaisena ja tarjoilee sivun, joka sisältää hyökkääjän omaa koodia.

Ongelmaa lievittää se, ettei linkin kautta tapahtuva XSS-hyökkäys muuta varsinaista sivustoa. Vaarassa ovat vain käyttäjät, jotka seuraavat muokattua linkkiä.

Tallennettavat XSS-hyökkäykset

XSS-hyökkäyksestä tulee astetta vakavampi, jos haittakoodi ei ole pelkässä linkissä, vaan hyökkääjä saa sen tallennettua palvelimelle. Tällaisille hyökkäyksille ovat alttiita mm. erilaiset järjestelmät joihin voi jättää kommentteja. Jos kommenttiin voi lisätä haittakoodia, se näkyy kaikille järjestelmän käyttäjille.

Aukkojen tilkitseminen

Palvelun suojaaminen XSS-hyökkäyksiltä on periaatteessa yksinkertaista: mihinkään, mitä käyttäjä syöttää ei tule luottaa. Tekstiä ei koskaan saa laittaa sivuille sellaisenaan, vaan siitä tulee suodattaa pois mahdolliset haittaelementit.

HTML-koodin pois suodattamiseen löytyy useimmista web-alustoista valmis toiminto. Lisäksi markkinoilla on monia kirjastoja jotka valvovat käyttäjien syöttämiä ja sivuilla näytettäviä tekstejä, jottei XSS-ongelmaa pääsisi syntymään kehittäjän huolimattomuuden kautta.

Aina ei ole tarkoituksenmukaista pelkästään suodattaa HTML:ää pois. Esimerkiksi julkaisujärjestelmissä käyttäjien tarvitsee käyttää erilaisia muotoiluja. Tähän käytetään usein listoja sallituista HTML-merkinnöistä, ja muut siivotaan pois. Tämä ei ole aivan yksinkertaista, sillä monet selaimet ovat valmiita hyväksymään rikkonaiset HTML-merkinnät, joita suodatin ei välttämättä tunnista.

Yksi vaihtoehto muotoiluun on käyttää omaa merkkauskieltä, kuten BBCode- tai MediaWiki-merkitätavat. Kaikki, mikä näyttää HTML:ltä voidaan tällöin poistaa, ja oma merkkauskieli muunnetaan tämän jälkeen turvalliseksi HTML:ksi.

Linkit

Julkaisujärjestelmä: Drupal   |   Tietoa Assemblix.netistä