Cross site scripting
Cross site scripting (XSS) on tietoturva-aukko, joka esiintyy usein WWW-sovelluksissa. Cross site scripting mahdollistaa koodin syöttämisen, ja sen avulla mahdollisesti tunkeutumisen verkkosivulle.
XSS-aukkoa hyödyntäen voidaan kiertää pääsynhallinta, kuten ”sama alkuperä” -käytäntö. Haavoittuvuutta voidaan hyödyntää esimerkiksi HTML-koodilla tai asiakaspäässä suoritettavilla skripteillä.
Cross site scriptingistä käytettiin aluksi lyhennettä "CSS", mutta tästä lyhenteestä on luovuttu, koska se sekoittuu helposti kaskadisiin tyyliohjeisiin ("Cascading Style Sheets").
Erityisen vaarallisia aukot ovat sivustoilla, joilla käsitellään henkilötietoja, rahaa tai joiden surffaajien henkilöllisyyden tulisi pysyä salassa (esim. ihmisoikeusaiheiset sivustot monissa maissa).
Kun Netscape-selaimeen lisättiin JavaScript-tuki, havaittiin, että siihen liittyy turvallisuusriski, kun WWW-palvelin lähettää suoritettavaa koodia käyttäjän koneelle. Yksi ongelmista syntyy, kun käyttäjä avaa useita selainikkunoita. Joissain tapauksissa skripti tarvitsee oikeuksia toisen sivuun tai objektin käsittelemiseen. Toisaalta taas tämä tulisi estää, koska ominaisuutta hyväksikäyttävä vihamielinen koodi voi varastaa salattavia tietoja. Ongelman ratkaisemiseksi selaimissa otettiin käyttöön yhtenäinen turvallisuuskäytäntö. Käytäntö sallii objektien ja sivujen vuorovaikutuksen vain samalla yhteyskäytännöllä ja saman verkkotunnuksen sisällä. Näin hyökkääjän verkkosivustolla ei ole pääsyä selaimen toisessa ikkunassa oleviin, salattaviin tietoihin. Samankaltaisia saantikäytäntöjä on sittemmin omaksuttu muihinkin skriptikieliin.
Cross site scripting -turvallisuusaukot ovat verkkosivuilla olevia haavoittuvuuksia, joita hyväksikäyttäen hyökkääjä voi ohittaa nämä suojamekanismit. Verkkosivulle syötetyn vihamielisen koodin avulla hyökkääjä pääsee käsiksi salattaviin tietoihin, evästeisiin ja muihin kohteisiin.
XSS-haavoittuvuudet luokitellaan DOM-pohjaisiin, pysyviin ja ei-pysyviin.
DOM-pohjaiset haavoittuvuudet, eli paikalliset cross site scripting -haavoittuvuudet ovat sivujen skripteissä itsessään. Tällainen haavoittuvuus voi sisältyä esimerkiksi JavaScript-koodiin, joka käyttää sivun osoitteessa annettuja parametreja kirjoittaessaan sivulle sisältöä. Sivu on haavoittuva, jos parametrinä välitettävää tietoa ei ennen sivulle lisäämistä käsitellä siihen mahdollisesti sisällytettyjen HTML-koodien varalta. Tällöin parametrinä annettu HTML lisätään sivulle sellaisenaan, minkä seurauksena se saatetaan tulkita ja suorittaa sivun katselijan selaimessa. Käytännössä nämä aukot ovat hyvin samankaltaisia kuin ei-pysyvät haavoittuvuudet.
Koska Internet Explorer -selaimen vanhat versiot käsittelevät asiakaspuolen skriptejä paikallisesti (esimerkiksi sivua selaavan käyttäjän koneen kovalevyllä), tällainen XSS-turvallisuusaukko voi aiheuttaa etäkäyttöhaavoittuvuuden. Jos paikallinen sivu (jollaisia asennetaan tyypillisesti selaimen asennuksen yhteydessä) on haavoittuva, hyökkääjän verkkosivustolla olevan linkin kautta tälle sivulle tultaessa sen sisältö suoritetaan käyttäjän koneella, käyttäjän selaimen oikeuksilla hänen järjestelmässään. Näin on mahdollista ohittaa pelkästään XSS-hyökkäysten estoon tarkoitettujen verkkotunnusrajoitusten lisäksi kaikki muutkin selaimen skripteille normaalisti asettamat rajoitukset. Internet Explorerin osalta tämä turvallisuusaukko on korjattu Internet Explorer 6 Service Pack 2:ssa.
Ei-pysyvissä tai väliaikaisissa XSS-aukoissa haitallisesti muotoiltu koodi ei tallennu sivustoa ylläpitävälle palvelimelle, mutta toimii käyttäjän selaimessa siten, kuin sen alkuperä olisi sivusto itse. Haittakoodi ujutetaan sivustolle osoitteen avulla. Käyttäjä täytyy huijata klikkaamaan vahingollisesti muotoiltua linkkiä esimerkiksi sähköpostissa, pikaviestissä, tekstiviestissä, hakukoneen tuloslistauksessa, keskustelualueella tai internetsivuilla.
Esimerkki:
Pysyvissä XSS-aukoissa haittakoodi on tallennettu sivustoa ylläpitävälle palvelimelle esimerkiksi sivuston osoitteeseen lisättyjen parametrien avulla, lomakkeella tai vihamielisesti muotoilluilla tiedoilla, joita selain ilmoittaa itsestään HTTP-kutsun yhteydessä. Sivulla vierailevat altistuvat haittakoodille. Sivuston osoite ei näytä huomiota herättävän pitkältä koodilta, ja sivulle voidaan eksyä normaalisti sivustolla navigoimalla.
Esimerkki:
Internetissä on satoja esimerkkejä cross site scipting -haavoittuvuuksia julkisesti esillä. Seuraavat esimerkit havainnollistavat erilaisia tietoturva-aukkoja.
Cross site scripting -haavoittuvuuksien välttäminen edellyttää HTML-koodien siistimistä ("quoting" tai "escaping") ennen kuin web-sovellus tai skripti käyttää niitä tulostuksessa. Monissa ohjelmointikielissä tähän on sisäänrakennetut funktiot tai kirjastot.
Ongelmana XSS-haavoittuvuuksien välttämisessä on, että keinot riippuvat usein tilanteesta, eli sivuston tarpeista ja ongelmista. Turvallisin menetelmä web-sovelluksille on jäsentää HTML, riisua tunnisteet ja attribuutit, joita ei ole erikseen sallittu ja tulostaa vasta sen jälkeen.
Yksinkertaiset suodatustavat, kuten tunnettujen vaarallisten tunnisteiden riisuminen, eivät välttämättä riitä. Esimerkiksi Hotmailiin lokakuussa 2001 kohdistuneessa hyökkäyksessä hyödynnettiin standardoimattomia parametreja.