Pagrindiniai web sistemų pažeidžiamumai Ir saugos būdai


8. Netinkami URL prieigų apribojimai

 

Daugumoje neteisingos URL prieigos apribojimų atvejų privilegijuotas funkcionalumas ir resursai gali būti pasiekiami žinant tik reikiamą URL adresą. Pavyzdžiui, administratoriaus operacijos pažeidžiamoje Web sistemoje galėtų būti pasiekiamos šiuo adresu:

http://vulnerable.com/admin/

Neretai programuotojai kaip saugumo priemonę naudoja sudėtingas URL kombinacijas vietoje autentifikacijos bei autorizacijos mechanizmų. Ši „saugumo per miglotumą“
(security through obscurity) praktika yra seniai žinoma kaip nepasitvirtinusi. Net ir perduodant URL šifruotais kanalais yra labai sunku apsaugoti konfidencialumą. Maža klaidelė, paviešinanti informaciją kliento scenarijuje, viešai prieinamuose žurnaluose ar kur kitur, iš karto pralaužia šios schemos saugumą. Galų gale URL reikšmė yra laisvai matoma naršyklės URL juostoje, istorijoje bei Proxy serverių žurnaluose.

Kai kuriose pažeidžiamose Web aplikacijose neapribotas URL gali paviešinti kliento scenarijus. Žemiau pateiktas Javascript kodas, į puslapio meniu sarašą įterpiantis tik
administratoriaus matomą nuorodą į privilegijuotą puslapį:

var isAdmin = false;
/* … */
if (isAdmin)
{
adminMenu.addItem(“/menus/ff567/addnewUser.php”,
“create a new user”);
}

Įsilaužėlis, peržiūrėjęs Javascript kodą, gali lengvai nustatyti šias URL reikšmes ir bandyti jomis pasinaudoti. Taip pat pasitaiko atvejų, kada Web aplikacijoje yra naudojamos neapribotos URL funkcijos bei metodai, pvz:

http://vulnerable.com/app/admin_getappInfo

Arba neapribota URL prieiga prie dokumentų naudojant identifikacijos reikšmę:

http://vulnerable.com/app/viewdocument.php?docid=1234869

Saugojantis nuo šio tipo pažeidžiamumų, niekada nederėtų daryti prielaidų apie vartotojų neišmanymą (URL, identifikacijos reikšmės, pakeistas kliento Javascript kodas ir pan.) ir nemanyti, kad puslapiai bus naršomi numatoma tvarka. Prieigos teisių kontrolė turėtų apimti visus pasiekiamus aplikacijos resursus bei funkcionalumą.  Kritinėse vietose, tokiose kaip tik administratoriaus pasiekiami puslapiai, galima dar labiau riboti vartotojų prieigą, prisijungimus leidžiant tik iš tam tikrų IP adresų. Statinėms byloms apsaugoti gali būti naudojama HTTP autentifikacija (bazinei autentifikacijai rekomenduojama naudoti SSL/TLS) arba netiesioginė prieiga, užtikrinanti, kad užklausos būtų autorizuojamos.