Popis prieniku do systému WWW.VASAADRESA.SK

13.08.2003 09:02 | blackhole

www.vasaadresa.sk je platená - a podľa úvodnej obrazovky profesionálna - webhostingová služba prevádzkovaná spoločnosťou eTechnologies s.r.o. (okrem iného prevádzkovateľ portálu Azet.sk). Nasledovný popis vážnej bezpečnostnej trhliny v systéme vasaadresa.sk ukazuje, že prevádzkovateľ služby má čo vysvetľovať svojim klientom, ktorí ju s dôverou využívajú.

Systém pri pokuse o prihlásenie a zadaní nesprávneho hesla neinformuje užívateľa o tom čo sa stalo (nesprávne meno/heslo), iba vypíše znovu prihlasovací formulár.

Po následných experimentoch s rozličnými prihlasovacími menami (ďalej len LOGIN) a heslami sme zistili, že po zadaní prihlasovacieho mena (užívateľského ID), ktoré nie je číselné, nám systém ochotne ponúkne informáciu o neúspešnosti databázovej požiadavky (QUERY) a ešte ochotnejšie nám túto query aj vypíše. Na ilustráciu prikladáme jednu z takto získaných chybových hlášok:

CHYBA
Popis chyby:
Unknown column 'asd' in 'where clause'
Dotaz:
SELECT * FROM Zakaznik Z LEFT JOIN ZakaznikUdaje U ON U.idZakaznik=Z.idZakaznik WHERE Z.idZakaznik=asd AND Z.heslo='asd'

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /opt/web/vasaadresa.sk/vasaadresa.sk/noweb/funkcie/hPrihlasenieLog.p on line 3

Z tejto informácie vieme zistiť (okrem toho že sme sa dozvedeli kompletnú cestu ku skriptom, teda máme predstavu o adresárovej štruktúre webu a zčasti aj o štruktúre databázy) že vznikla chyba v query \"SELECT * FROM Zakaznik Z LEFT JOIN ZakaznikUdaje U ON U.idZakaznik=Z.idZakaznik WHERE Z.idZakaznik=asd AND Z.heslo='asd'\" a ďalej nám to - po krátkej analýze, ktorá profesionálnemu programátorovi nerobí ani najmenší problém - poskytlo informáciu, že originálna query je zapísaná nejako takto...

SELECT * FROM Zakaznik Z LEFT JOIN ZakaznikUdaje U ON U.idZakaznik=Z.idZakaznik WHERE Z.idZakaznik=$login AND Z.heslo='$pass'

... kde $login je užívateľské ID z formulára a $pass je heslo z formulára.

Tieto informácie nám postačili na vytvorenie užívateľského mena, ktoré nám dovoľuje vstúpiť do užívateľského priestoru ktoréhokoľvek užívateľa systému. Postup je približne nasledovný (v záujme bezpečnosti nebudeme uvádzať úplný postup)...

Popis prieniku

Autentifikačný mechanizmus pracuje na spôsobe požiadania databázy o informácie užívateľa, ktorý je jednoznačne identifikovaný užívateľským ID a heslom. Pokiaľ by tieto informácie boli korektné, systém vráti PRÁVE JEDEN záznam (kedže predpokladáme, že užívateľské ID je unikátne - jednoznačné). My však pomocou menšej úpravy query dokážeme donútiť systém, aby nám vrátilo všetky záznamy v databáze a potom pomocou limitovania riadkov vieme systém donútiť k vráteniu práve jedného riadku - toho, ktorý potrebujeme. Tým nás systém považuje za autentifikovaných, zapíše si autentifikačný token - záznam o prihlásení - a povolí nám operácie v užívateľskom priestore.

V systéme však existuje aj užívateľ, ktorý ma nastavené administrátorské privilégiá a môže schvaľovať, zamietať a inak modifikovať platby, užívateľské kontá a priestory. Postup na získanie administrátorského konta je úplne totožný, stačí len vytipovať správneho užívateľa. Možnosti administrátora môžeme ukázať na priložených screenshotoch.

Čo ďalej?
Takéto chyby sú v systémoch na dnešnom internete časté a bežné. Avšak web developeri sa ich snažia ochrániť aspoň spôsobom, že skrývajú chybové hlášky a queries pred nepovolanými očami. Keby takto urobili aj eTechnologies, nestalo by sa to. Naviac by sa takéto prešľapy nemali stávať pri platenej službe (navyše označovanej ako “profesionálna”), kde ide okrem iného aj o osobné údaje zákazníkov, a informácie o finančných transakciách. Bezpečnostnú chybu sme objavili a sledovali od začiatku poskytovania služby vasaadresa.sk (niekoľko mesiacov dozadu), počas celej doby boli prístupné (a potenciálne zneužiteľné) všetky údaje, a administrovateľné všetky hosťované domény.

Toto nie je prvý problém s bezpečnosťou u eTechnologies, z minulosti sú známe početné prieniky do služby Pokec.sk, alebo z nedávnej minulosti známy problém so službou Fotoalbumy.sk, kde bolo možné nepovolanými užívateľmi prezerať súkromné zaheslované fotografie.

Programátori by si mali dať pozor na to, aké queries píšu a čo dovolia užívateľom vkladať do query. Dokument o SQL injection (ako sa tento postup nazýva) sa nachádza na tejto linke: http://www.nextgenss.com/papers/advanced_sql_injection.pdf

Záver
Vyhlasujeme, že sme žiadne zo získaných informácií nezneužili ani nepoužili v náš prospech, ani v neprospech eTechnologies, a tento dokument vznikol ako ukážkový príklad chýb pri tvorbe obsahu a systémov na dnešnom internete.

Referencie
Linky v tejto sekcii patria technológiám, ktorých sa tento dokument týka, ako aj informačným dokumentom o technikách SQL injection a ostatných technikách, použíteľných pri prieniku do web aplikácie.

http://www.mysql.com
http://www.php.net
http://www.nextgenss.com/papers/advanced_sql_injection.pdf
http://www.securereality.com.au/studyinscarlet.txt

http://www.vasaadresa.sk
-PGB Group, 12/08/2003PGB Group