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


4. Nesaugi tiesioginė prieiga prie objektų

 

Web aplikacijos dažnai naudoja objekto vardą ar raktą, kuomet generuojamas Web puslapis. Neretai pamirštama šių objektų pasiekiamumą apsaugoti nuo vartotojo įvesties manipuliacijų. Paprastas tokio pažeidžiamumo pavyzdys yra Web scenarijus, tiesiogiai atvaizduojantis vartotojo pasirinktą bylą (file inclusion[28] tipo pažeidžiamumai). Šio tipo pažeidžiamumo Damn Vulnerable Web App modulyje naudojamas URL atrodo taip:

http://127.0.0.1:8080/dvwa/vulnerabilities/fi/?page=include.php

Tarkime, kad byloje C:/slaptazodziai.txt yra saugoma konfidenciali informacija (vartotojai ir jų slaptažodžiai), bandome vykdyti šią URL užklausą:

http://127.0.0.1:8080/dvwa/vulnerabilities/fi/?page=c:slaptazodziai.txt

Rezultate gaunamas puslapis su įtrauktu bylos turiniu:

fileinclusion-dvwa

 

Žemiau pateiktas dar vienas pavyzdys (iš OWASP), kuomet SQL užklausai formuoti yra naudojami nepatikrinti duomenys:

String query = "SELECT * FROM accts WHERE account = ?";
PreparedStatement pstmt = connection.prepareStatement(query , ... );
pstmt.setString( 1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery();

Norint išnaudoti šį pažeidžiamumą, tereikia pakeisti parametro ‘acct’ reikšmę į pasiekti norimos sąskaitos numerį, pavyzdžiui:

http://bank.com/viewAcct.jsp?acct=1

Saugantis nuo tokio pobūdžio atakų, Web aplikacija turėtų visada patikrinti autentifikuoto vartotojo prieigos teises į užklaustą objektą. Tai gali būti įgyvendinama
integruojant atitinkamus prieigos mechanizmus su sesijos ar vartotojo objektais (netiesioginė prieiga). Kai kuriais atvejais baltojo sąrašo (whitelisting) apsisaugojimo
technika taip pat gali būti naudinga.