Oleme aidanud Coop Eesti Keskühistul hallata ja arendada nende e-poe veebirakendust. 2020. aasta augustis paluti meil parandada turvaprobleem, mille avastas turvaekspert Ando Roots. Ta avaldas haavatavuse kohta ka põhjaliku tehnilise analüüsi.
Avatud ümbersuunamise haavatavus
Probleem võimaldas ründajal koostada lingi, mis suunas Coop'i kliendi pärast sisselogimist pahatahtlikule veebilehele. Võltsleht võis jäljendada Coop'i sisselogimisvormi, kuvada teate „Vale kasutajanimi või parool“ ning meelitada kasutaja oma andmeid uuesti sisestama.
Sellised vead on levinud, sest ükski raamistik ei suuda kaitsta arendajat kõigi ebaturvaliste eelduste eest. Kasutaja kontrolli all olevat sisendit tuleb alati käsitleda ebausaldusväärsena, eriti siis, kui see mõjutab navigeerimist, autentimist või ligipääsuõigusi.
Panime pähe oma valged mütsid ja vaatasime sisselogimisvoogu ründaja vaatenurgast.
Kuidas ümbersuunamise parameeter töötas
Coop'i sisselogimisleht võttis vastu GET-päringu parameetri next. Selle eesmärk oli mõistlik: pärast autentimist suunati kasutaja tagasi lehele, mida ta algselt avada soovis, mitte üldisele avalehele.
Näiteks see aadress viis kasutaja pärast sisselogimist ostunimekirjade vaatesse.
Probleem seisnes selles, et ümbersuunamise sihtkohta ei piiratud piisavalt. Ründaja võis kasutada välisele domeenile osutavat aadressi. Pärast edukat sisselogimist jõudis kasutaja ründaja kontrolli all olevale lehele.
Usutav võltsleht võis paluda uuesti sisse logida. Kui kasutaja sisestas andmed, sai ründaja need kätte ja suunas inimese tagasi päris Coop'i veebirakendusse, kus olemasolev sessioon jätkus tavapäraselt. Kasutaja ei pruukinudki märgata, et tema kasutajanimi ja parool olid lekkinud.
Kuidas turvaprobleemi lahendasime
Lahendus oli ümbersuunamise sihtkoha valideerimine. Täpne teostus sõltub rakendusest, kuid meie kasutasime lubatud aadresside nimekirja: suunamine on võimalik ainult rakenduses selgelt määratud teekondadele. Kõik muud väärtused lükatakse tagasi.
Lubatud väärtuste nimekiri on turvalisem kui keelatud väärtuste nimekiri, sest see määrab väikese hulga teadaolevalt korrektseid sihtkohti ega ürita ennustada kõiki võimalikke ründevariante.
Üldist koodinäidet me ei lisa, sest teostus erineb projektiti. Ando artikkel sisaldab juhtumi kohta rohkem tehnilisi üksikasju.
Mida veebiarendaja sellest õppida saab
Turvalisust alahinnatakse sageli seni, kuni päris intsident on juba juhtunud. Selles olukorras teatas väline ekspert probleemist vastutustundlikult ega kasutanud seda kurjasti ära.
Põhimõte on lihtne: ära usalda kasutaja sisendit. Kontrolli ümbersuunamisi, URL-e, identifikaatoreid, õigusi ja kõiki muid väärtusi, mis võivad rakenduse käitumist mõjutada.
Ründaja moodi mõtlemine arenduse ajal aitab leida nõrkused enne, kui keegi teine neid ära kasutab.