Mis on XSS?
Skriptisüstimine, murdskriptimine või lühidalt cross-site scripting (XSS) on teatud koodisüsti rünnak. Antud juhul süstitakse pahatahtlikke skripte muidu õiguspärastele ja usaldusväärsetele veebilehtedele. Ründajad kasutavad pahaaimamatute kasutajate petmiseks XSS-i. Need rünnakud jõuavad kasutajani, kuna veebibrauserid ei suuda pahatahtlikke skripte tuvastada. Eriti kui need on pärit näiliselt usaldusväärsest allikast. Tavaliselt pääsetakse nende rünnakute kaudu küpsiste, seansilubade või muu brauseriga seotud tundliku teabe juurde.
XSS-rünnakuid esineb kahel juhul,
1. Andmete sisestamine veebirakendusse ebausaldusväärse allika kaudu.
2. Dünaamilises sisus sisalduvad andmed, mis saadetakse lõppkasutajale ilma pahatahtlikku sisu kontrollimata.
Lisaks võivad XSS-rünnakud esineda kahel kujul – salvestatud ja peegeldatud rünnakud. Salvestatud XSS-rünnakuga on tegu, kui pahatahtlik skript salvestatakse püsivalt sihtserverites. See võib olla andmebaasis või isegi kommentaariväljal. Peegeldatud XSS-rünnakud kajastavad süstitud skripti serverist, näiteks veateate kaudu. Need ründed toimetatakse tavaliselt kohale e-kirjade või veebisaidil oleva vormi kaudu, peibutades kasutajat pahatahtlikku koodi tarbima, esitades seda seaduslikul viisil. Selle tulemusel sisestatakse kood haavatavale veebisaidile, peegeldades rünnakut tagasi kasutaja brauserisse. Brauser käivitab koodi.
Esineb ka DOM XSS-i rünnakuid. Selleks võib olla JavaScripti raamistik, ühelehelised rakendused või API-liidesed, mis hõlmavad dünaamiliselt lehe ründaja kontrollitud andmeid.
Gmaili XSS-i haavatavus
Gmailis, kõigi poolt eelistatud e-posti kliendis, parandati hiljuti tõsine XSS-i haavatavus. Haavatavuse avastas Securitumi turvalisuse vanemuurija Michal Bentkowski. See leiti e-posti kiirendatud mobiililehtede (AMP4Email) funktsioonist, mida nimetatakse ka “dünaamiliseks meiliks”. Irooniline on see, et dünaamiline e-post on Gmaili jaoks beetaversioonist välja arenenud uus funktsioon, mille eesmärk oli muuta veebipostituse kogemusi dünaamilisemaks.
Google’i kiirendatud mobiililehtede projekt sai alguse aastal 2015 ja eesmärgiks oli muuta veebikogemus mobiiliplatvormidel tõhusamaks. Adobe andmetel toimus Ameerika Ühendriikide populaarsematel kirjastajatel esimese aasta jooksul Google AMP kaudu 7% kogu liiklusest kõigi seadmete vahel. Umbes 3 aastat hiljem avalikustas Google arendaja eelvaate funktsioonile AMP4Email. Teates sedastab Google, kuidas „AMP sai alguse kirjastajate abistamisest, kuid kuna selle võimalused on aja jooksul laienenud, on see nüüd üks parimaid viise rikkalike veebilehtede loomiseks. Sellega avanes võimalus moderniseerida ühte populaarseimat kohta, kus inimesed oma aega veedavad: e-posti.”
AMP4Emaili idee on võimaldada laias valikus funktsioone alates sündmuste kutsetele vastamisest kuni hotellibroneeringute üksikasjade haldamiseni Gmailis endas. Kahjuks esitas see häkkeritele ka saidiülese skriptimisrünnaku võimaluse. See haavatavus on seotud dokumendiobjektide mudeli (DOM) muutmise – veebibrauserite pärandfunktsiooniga.
Mis on DOM-i muutmine?
Tavaliselt kasutaksite HTML-elemendile viitamisel JavaScriptis erinevaid funktsioone. Kui seda tehakse pärandmeetodi abil, saadakse juurdepääs globaalse ‘aknaobjekti’ atribuudi kaudu. Teisisõnu, kasutades “document.getElementById (‘kasutajanimi)” asemel “window.username”. Põhimõtteliselt on tegu DOM-i muutmisega. Nagu Michal ütleb, võib DOM-i muutmine “põhjustada huvitavaid haavatavusi, kui rakendus teeb otsuseid teatud globaalsete muutujate olemasolu põhjal”. Seeläbi võivad ründajad Gmaili kasutajate süsteeme kahjustada, süstides dünaamilisse Gmaili sõnumisse pahatahtlikku koodi.
Michal mainib oma aruandes, et „AMP4Email proovib teatud JS-faile laadida ja ei tee seda 404 tõttu. Mis on aga eriti pilkupüüdev, on see, et URL-i keskel on määratlemata … AMP proovib saada AMP_MODE atribuuti URL-i sisestamiseks. DOM-i muutmise tõttu puudub eeldatav atribuut, seega on see määratlemata.” Selle määratlemata sildi tõttu saab kogu URL-i juhtida.
Michal teavitas 15. augustiks Google’it oma järeldustest. Septembriks vastas Google, öeldes, et viga on “vinge”. Kuu aega hiljem kinnitas Google, et haavatavus on parandatud.
Kui tõsine oli see haavatavus?
See XSS-i haavatavus on kasutaja seisukohast ilmselgelt seotud turvariskiga. Kuid haavatavus ei pruugi olla hiljutise Google’i kaamerarakenduse turvariskiga võrreldes sama murettekitav. Kui te sellest teadlik ei olnud, siis teatas Checkmarxi nimeline ettevõte hiljuti Google’i kaamerarakenduse haavatavusest. Selle raporti kohaselt mõjutas see sadu miljoneid kasutajaid.
Ausalt öeldes kasutab AMP4Email teatavat kaitset DOM-i muutmise vastu, kuna see keelab atribuudi “id” teatud väärtused. Kuid atribuudi “AMP_MODE” puhul ei rakendatud sama piirangut. Sellest tulenes turvaauk. Õnneks on Google haavatavuse juba parandanud.
Enda kaitsmine XSS-rünnakute eest
Saidiülesed skriptimisrünnakud on tänapäeval endiselt üks suurimaid julgeolekuohte. OWASPi 2017. aasta julgeolekuohtude kümne olulisema loendisse kuulub ka saidiülene skriptimine. Seda tüüpi rünnakute puhul on võimalik väga vähe ära teha, kui rünnakud tulenevad müüjapoolsest haavatavusest. Kuid see ei tähenda, et te ei saaks end XSS-i rünnakute eest kaitsta. XSS-rünnakuid saab leevendada mitmel viisil.
- Vältige XSS-i juba disainis. See tähendab selliste raamistike kasutamist nagu uusim Ruby on Rails või React JS.
- Vältige ebausaldusväärsete HTTP-päringu andmete põhjal HTML-väljundi kontekstist.
- Kontekstitundliku kodeeringu rakendamine kliendi poolel brauseridokumendi muutmisel toimib DOM XSS-i vastaselt.
- Kasutage sisu turvalisuse poliitikat.
Lisaks võivad sellised mehhanismid nagu sisendi valideerimine parandada turvalisust saidiülese skriptimise rünnakute suhtes. OWASP-i XSS-i vältimise nõuanded pakuvad üksikasjalikumaid soovitusi kaitsmiseks nende rünnakute eest.