Viimasel ajal üha enam on endale jäänud ette puugipreemiajahi(“bug bounty”) programmides raporteerimiseks ning niisama turvatestimise käigus selline turvanõrkus nagu IDOR(BOLA). Mis on Eesti keeles oleks siis Cybernetica toreda sõnastiku järgi “ebaturvaline objekti otseviide”. Lihtsustatult kirjeldades siis oleks see nii, et veebis on viide mingile objektile näiteks dokumendile, mis peaks olema privaatne ning mitte kõigile kättesaadav, kuid tegelikult ei toimu sellel mingit ligipääsukontrolli või toimub see poolikult.
Täieliku ligipääsu kontrolli puudumise all mõtlen ma siin siis seda, et igaüks, kes linki teab saab selle objekti poole pöörduda, näiteks dokumenti API kaudu pärida, ilma ühtegi eelnevat kasutaja tuvastus toimingut tegemata. Pooliku/katkise ligipääsukontrolli all pean silma silmas seda, et kasutaja on tuvastatud küll, kuid saab ligi andmetele, mis tegelikult on teise kasutaja omad, ehk autentimine toimus, autoriseerimine mitte.
Juhul kui see, et teatud andmed on kättesaadaval autentimata kujul on teadlikult tehtud disaini otsus (vastavalt sellele kui tundlikud andmed on,jne) ning objektide poole pöördumiseks vajalikud identifikaatorid on piisavalt keerukad, muutes nende ära arvamise piisavalt keeruliseks/suhteliselt võimatuks. Siis ei pruugigi see kõige suurem probleem just olla, kuid kahjuks enamasti pole see päris teadlik otsus olnud ja tegu on siiski tõsise andme lekke kohaga.
Liiga lihtsad objekti viited
Milline siis oleks üks liiga lihtne objekti viide, mis muudaks IDOR’i ära kasutamise väga lihtsaks? Ei ole just harv juhus, kui objektidele viitamisel on kasutusel lihtsalt numbrilised “ID-d” näiteks 1, 123 või 10004. Autoriseerimise/autentimise vea esinemise korral väga lihtsasti ära kasutatava koosluse näide API puhul oleks siis järgmine:
https://www.verifiedsecurity.eu/meie-privaatne-api-url/anna_dokument/123456
Isegi kui kasutaja autentimine/autoriseerimine toimib korrektselt ei ole see hea. See ei oleks esimene kord, kui mingi ligipääsu õiguste kontrolli viga kunagi hiljem rakendusse sisse hiilib.
Vahel on ka natuke pikemad numbri jadad, kuid automatiseeritud “käime kõik arvud mingis vahemikus läbi” kontrolli jaoks ei oleks see mingi takistus.
Milline ID oleks siis hea?
Üks hea objekti identifikaator sisaldab endas nii numbreid, sümboleid kui tähti. Ega mingit raketti ise leiutama ei peakski, keegi teine on seda juba teinud. Hea praktika oleks siis kasutada GUID’i või siis ka räsisid. Räside kasutamisel tuleb, aga selle eest hoolt kanda, et ei kasutaks liiga lihtsaid algandmeid räsi tekitamiseks.
6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b tundub ju küll olevat üks ära arvamatult keeruline asi? Tegelikult piisab selle sha256 räsi mõnda otsimootorisse panekust ja saad juba vastuseks, et see on numbri 1 räsi. Ehk siis halbadest algandmetest tehtud räsisid saab puhtalt guugeldamisega lahti murda. Olles teada saanud millest räsisid tehakse, et objektide identifikaatorid määrata on edasiste ära arvamine juba lihtne.
Igaks juhuks tuleb ära märkida, et sõltuvalt andmetest ja olukorrast ei pruugi GUID kasutamisest piisata ning peab olema kasutusel ka korrektne autentimine/autoriseerimine. Piisavalt keeruline identifikaator on lihtsalt lisa turvalisuse kiht, mis muudab andmete kõrvalisele osapoolele kättesaamise keerulisemaks.
Aga minu veebirakenduse/API, mis seis seal on?
Selle eelneva jutu peale tekkis huvi, et mis seis sinu enda veebiteenusega on? Kui jah siis võta oma teenuse turvatestimise(läbistustestimise)/turvalisuse hindamise teemadel julgelt ühendust info@verifiedsecurity.eu või tutvu teiste meie pakutavate teenustega siin.