Cross-site scripting (XSS) on sovellusten haavoittuvuus, joka voi aiheuttaa tuhoa sovelluksissa ja verkkosivustoissa. XSS on niin yleinen ja potentiaalisesti haitallinen, että se on edelleen mukana Open Web Application Security Projectin (OWASP) 10 tärkeimmän haavoittuvuuden luettelossa.
Itse asiassa Cross-Site Scripting on yleisin vuodesta 2014 lähtien löydetty haavoittuvuus, ja vuonna 2019 se esiintyy edelleen raportoitujen haavoittuvuuksien Top 3:ssa.
- Mikä on Cross-Site Scripting (XSS)?
- Turvaudu XSS-hyökkäyksiltä
- Miten Cross-site Scripting toimii?
- Millaisia XSS-hyökkäystyyppejä on?
- Heijastetut XSS-hyökkäykset
- Tallennetut XSS-hyökkäykset
- DOM-pohjaiset XSS-hyökkäykset
- Mitkä ovat Cross-Site Scripting-hyökkäysvektorit?
- Mitkä ovat XSS-haavoittuvuuksien vaikutukset?
- Miten Cross-site Scriptingiä testataan?
- Testaa koodisi XSS-haavoittuvuuksien varalta
- Mikä on cross-site scripting -esimerkki?
- Miten Cross-site Scripting -hyökkäyksiä voidaan ehkäistä?
Mikä on Cross-Site Scripting (XSS)?
Jossain tapauksissa myös selaimen puoleinen skripti voi tuoda tämän haavoittuvuuden, jolloin hyökkääjä voi käyttää sitä hyväkseen ilman, että kohdekäyttäjä tekee pyynnön verkkosovellukselle.
Hyökkääjät käyttävät XSS:ää hyväkseen laatimalla haitallista koodia, joka voidaan ohjata toiselle käyttäjälle ja jonka pahaa aavistamaton selain sitten suorittaa. Koska skripti sisältyy useimmiten verkkosovelluksen vastauksen sisältöön, se suoritetaan ja sillä on samat käyttöoikeudet kuin jos skripti olisi laillinen. Se voi päästä käsiksi istuntotunnisteisiin, evästeisiin ja jopa luottamuksellisiin tai arkaluonteisiin tietoihin, joihin selaimella on pääsy kyseisellä sivustolla, ja se voi jopa kirjoittaa HTML-sivun sisällön uudelleen.
Turvaudu XSS-hyökkäyksiltä
Haavoittuvuuksien automaattinen etsiminen, priorisointi ja korjaaminen avoimeen lähdekoodiin perustuvissa riippuvuussovelluksissa, joita käytetään pilvinatiivien sovellusten rakentamiseen
Miten Cross-site Scripting toimii?
Millaisia XSS-hyökkäystyyppejä on?
Heijastetut XSS-hyökkäykset
Heijastetuissa XSS-hyökkäyksissä haitallinen skripti syötetään HTTP-pyyntöön (yleensä käyttäjälle toimitetun, erityisesti muotoillun linkin kautta). Yksinkertaisimmillaan se käyttää HTTP-pyynnössä syöttöparametreja, joita voidaan helposti manipuloida niin, että ne sisältävät haitallisen skriptisisällön. Haitallinen skripti heijastuu sitten palvelimelta HTTP-vastauksena ja se suoritetaan uhrin selaimessa.
Tässä tapauksessa se toimii kuin tallennettu XSS ilman, että haitallista tietoa todella tallennetaan palvelimelle.
Tässä on esimerkki heijastetusta XSS-hyökkäyksestä:
Esitettäköön, että esimerkki.com/profile sisältää nimiparametrin. Pyynnön URL-osoite näyttäisi tältä: https://example.com/profile?user=Tammy. Tämän syötteen perusteella verkkosovellus vastaisi näin ollen sivun yläosassa ”Hi Tammy”. Jos parametreja ei validoida sen varmistamiseksi, että se sisältää vain odotettuja tietoja, hyökkääjä voisi saada käyttäjän vierailemaan URL-osoitteen haitallisessa versiossa esimerkiksi näin:
Tallennetut XSS-hyökkäykset
Tallennetuksi tai pysyväksi XSS-hyökkäykseksi kutsutussa hyökkäyksessä haitallista sisältöä toimitetaan suoraan palvelimen vastauksen mukana, kun käyttäjä lataa verkkosivun. Sisältö on siis jo tallennettu verkkosivuston tietokantaan (tästä nimi tällaisille hyökkäyksille). Käyttäjät sitten yksinkertaisesti menevät hakkeroidulle verkkosivulle ja joutuvat tällaisten hyökkäysten uhriksi.
Jokainen käyttäjä, joka avaa tällaisen vaarantuneen verkkosivuston, on siten vaarassa saada henkilökohtaiset tietonsa varastetuksi, joten tätä voidaan pitää kaikkein vaarallisimpana XSS-hyökkäyksen tyyppinä.
Mutta miten haitallista sisältöä pääsee tietokantaan alun perin? Useimmissa tapauksissa se kulkeutuu suojaamattomien verkkosivulomakkeiden kautta, joissa käyttäjän syötettä ei ole validoitu ja puhdistettu asianmukaisesti. Jos hakkerin syöttämiä tietoja ei validoida sekä asiakas- että palvelinpuolella, ne tallentuvat tietokantaan. Tällaisia syötteitä voivat olla esimerkiksi kommenttitekstialue, viestien tekstieditori, henkilötietojen editori tai muut lomakkeet.
Kun hyökkääjä onnistuu lähettämään haitallista sisältöä palvelimelle ja tämä sisältö näkyy suodattamattomana verkkosivulla, kaikista käyttäjistä tulee potentiaalisia uhreja.
Hyökkääjästä ja hänen pahantahtoisesta aikomuksestaan riippuen XSS-hyökkäykset voivat johtaa erilaisiin vaikutuksiin, mm:
- käyttäjän istunnon kaappaaminen, valtuustietojen hyödyntäminen muihin sivustoihin pääsemiseksi tai käyttäjän ohjaaminen ei-toivotuille sivustoille,
- verkkosivujen muuttaminen tai osioiden lisääminen verkkosivulle,
- skriptien suorittaminen arkaluonteisten tietojen poimimiseksi evästeistä tai tietokannoista,
- jos uhrilla on hallinnointioikeudet,
- hyökkäys voi laajentua palvelin-puolelle aiheuttaen lisävahinkoa tai noutaen lisää arkaluonteista tietoa.
Miten Cross-site Scriptingiä testataan?
Alustaviin testeihin kuuluu koodin vertailuanalyysi, jolla tunnistetaan yleisten XSS-hyökkäysvektorien käyttö, jotka esittävät mahdollisia haavoittuvuuksia. Tämä mahdollistaa heikkouksien lieventämisen ennen varsinaisen sovelluksen testauksen aloittamista.
Kriittisten verkkosovellusten XSS-haavoittuvuuksien testauksen keskeisiä vaiheita ovat:
- koodin skannaustyökalun käyttäminen haavoittuvuuksien havaitsemiseksi, mikä mahdollistaa koodin korjaukset kehitysprosessin aikana,
- automaattisen testaustoiminnon käyttöönotto, joka paljastaa mahdolliset haavoittuvuudet perusteellisesti ja nopeasti.
Testaa koodisi XSS-haavoittuvuuksien varalta
Automaattisesti löytää, priorisoida ja korjata haavoittuvuudet avoimen lähdekoodin riippuvuuksissa, joita käytetään pilvinatiivien sovellusten rakentamiseen
Mikä on cross-site scripting -esimerkki?
Cross-site scriptingiä voidaan hyödyntää, kun verkkosovellus käyttää selaimen toimittamia tietoja luodessaan vastauksia käyttäjän pyyntöihin. Hyvin yksinkertaistettu esimerkki olisi tapaus, jossa verkkosovellus käyttää URL-osoitteessa olevaa parametria tarjotakseen käyttäjälle räätälöidyn vastauksen.
Esitettäköön, että exmple.com/profile sisältää nimiparametrin. Pyynnön URL-osoite näyttäisi seuraavalta https://example.com/profile?user=Tammy. Verkkosovellus vastaa tämän syötteen perusteella sivun yläosassa ”Hi Tammy”.
Jos käyttäjäparametria ei validoida sen varmistamiseksi, että se sisältää vain odotettuja tietoja, hyökkääjä voi saada käyttäjän vierailemaan URL-osoitteen haitallisessa versiossa, joka näyttää tältä:
https://example.com/profile?user<script>some_malicious_code</script>.
Kun vastaus lähetetään selaimelle, se sisältää tuon haitallisen komentosarjakuvan, joka sen jälkeen suoritetaan selaimessa, todennäköisesti käyttäjän tietämättä. Tämä on esimerkki heijastetusta XSS-hyökkäyksestä. Haitallinen koodi ”heijastuu” välittömästi takaisin pyynnön esittäneelle käyttäjälle.
Miten Cross-site Scripting -hyökkäyksiä voidaan ehkäistä?
- Koulutuksen ja tietoisuuden lisääminen: Varmista, että kaikki kehittäjät, verkkosuunnittelijat ja laadunvarmistusryhmät ovat tietoisia menetelmistä, joita hakkerit käyttävät haavoittuvuuksien hyödyntämiseen, ja tarjoa ohjeita ja parhaita käytäntöjä koodausta varten. Tähän kuuluu myös sovellusympäristön (JavaScript, HTML jne.) asianmukaiset escaping/koodaustekniikat.
- Sanitize input: Riippumatta siitä, onko kyseessä sisäiset verkkosivut vai julkiset verkkosivustot, älä koskaan luota käyttäjän syöttämien tietojen oikeellisuuteen. Seulaa ja validoi kaikki tietokentät, varsinkin jos ne sisällytetään HTML-tulosteeseen.
- Skannaa koodi: Ota käyttöön ohjelmisto, joka skannaa koodin haavoittuvuuksien varalta, mukaan lukien cross-site scripting, varmistaaksesi, että parhaita käytäntöjä noudatetaan ja minimoidaksesi altistumisen XSS:lle ja muille OWASP-luettelossa mainituille haavoittuvuuksille.
- Sisällön turvallisuuskäytäntö: Käytä Content Security Policy (CSP) -käytäntöä (Content Security Policy) määrittelemään, mitä verkkosivusto voi tehdä, ja sitä kautta vähentämään XSS-hyökkäyksen riskiä. Käyttämällä CSP:tä XSS voidaan estää kokonaan (estämällä kaikki rivinsisäiset skriptit) tai vähentää riski paljon pienemmäksi.
OWASP tarjoaa lisäohjeita XSS-haavoittuvuuden estämiseen kattavalla huijauslomakkeella.