Tak ukázkové SQL injection, jako je na webu iŽabka, už jsem dlouho neviděl. A co hůř, ani po týdnu od hlášení chyby emailem není opraveno nic. Nezbývá, než věc zveřejnit, ukázat si, co dělají špatně a trochu se z toho poučit.

Ahoj, já jsem Tomáš a mám takovou úchylku. Pokaždé, když vidím na webu vyhledávací políčko, zadávám do něj divné věci. Většinou stačí málo. Uvozovky, apostrof nebo dvojkombinace ">. A podle toho, co na mě vypadne, si o vás často myslím něco ošklivého.

Nejsem ale takovej zmetek a dám vám o chybě vědět. Na twitteru, na emailu, kde zrovna jste. Většinou reagujete pěkně, poděkujete a chybu rychle opravíte. Občas hrajete mrtvého brouka, neodpovíte, nic neopravíte. A mě pak nezbývá, než chybu zveřejnit, udělat vám ostudu a pobavit odbornou veřejnost.

A proto se dnes pojďme zasmát na účet webu iŽabka.cz. Je to týden, co jsem je upozorňoval na SQL injection a žádná reakce, ani oprava. Ukážu vám, co udělali špatně a čemu se máte vyvarovat, pokud nemám příště psát o vašem webu.

Na stránce http://www.izabka.cz najdeme vyhledávací pole, do něj vepíšeme několik znaků, přidáme apostrof a stiskneme ENTER. 

Výsledek bude vypadat zhruba takhle: http://www.izabka.cz/cs/component/search/?searchword=whisky%20grant's&ordering=newest&searchphrase=exact

iŽabka SQL injection

 

Na co to koukáme? Tím apostrofem jsme rozbili syntaxi SQL dotazu. Část, která vyhledává přítomnost fráze v textu - LIKE, jsme naším apostrofem ukončili tak, že je celý dotaz neplatný. To je neklamná známka toho, že se vhodnou formulací vyhledávací fráze dá dotaz upravit vlastním představám.

Celou věc maximálně zjednodušuje ten chybový výpis s kompletním SQL dotazem. Nemusíte odhadovat, co že se to stalo a jak zhruba skládají dotaz do databáze. Máte to tu vypsané černé na bílém. 

Tady následuje právní vsuvka. Pokud vás teď napadlo, že by bylo fajn formulovat vyhledávací dotaz tak, aby začal vracet úplně jiná, nečekaná data, nezapomeňte, v trestním zákoníku existuje Zákon č. 40/2009 Sb., § 230, Neoprávněný přístup k počítačovému systému a nosiči informací.

Když začnete skládat dotazy a dolovat data z databáze iŽabky, s velkou pravděpodobností jednáte protiprávně. Proto vám nebudu ukazovat, jak by se dalo postupovat. Nerad bych ten zákon porušil. Já pouze hledal, zda něco nepíšou o mé oblíbené whisky ;)

Chtěl bych ale naznačit, co by případný útočník mohl získat a proč se ti zlí hackeři o takové útoky pokouší. Firmu pak může úspěšný útok stát nemalé peníze.

  • Je možné editovat text stránek. Někdo by mohl na naší úvodní stránce napsat, že jste zbankrotovali. Nebo změnili typ obchodu na sexshop. Co to udělá s vašimi zákazníky?
  • Pokud jsou v databázi uloženy uživatelské účty, nejspíš se povede získat login a heslo některého uživatele. 
  • Na stránkách je funkce "akční leták emailem". To znamená, že jsou nejspíš v databázi uloženy údaje zákazníků, kteří mají o leták zájem. Potrava pro spammery, konkurenci. Pokud se taková databáze dostane ven, bude mít provozovatel webu na krku ÚOOÚ a pře o to, zda dostatečně chrání údaje svých zákazníků. Nechrání.
  • Je možné na stránky podstrčit libovolný vlastní kód, třeba přesměrování na svou síť provozoven.
  • A mnoho dalšího. Cokoliv si dovedete představit, že na webu lze udělat. Útočník může získat plný přístup ke všemu.

 

Zopakujme si tedy, jak to dělat dobře, ať se podobným průserům vyvarujete:

  • Nechť vaši programátoři píšou bezpečný kód. SQL injection je známá, snadno odhalitelná chyba, o které se mluví už celou věčnost. Zeptejte se, co o SQL injection ví a jak se jí brání.
  • Testujte, zda web nevrací, co nemá. Jak jsem psal v úvodu, stačí několik jednoduchých znaků na úvodní otestování a odhalení největších problémů. Uvozovka, apostrof a podobně.
  • Koukejte do Google Analytics. Všímejte si, jaké dotazy lidi pokládají. Když odhalíte divné dotazy, ozkoušejte, co dělají. Máte je zaznamenány, neignorujte tu informaci.
  • Monitorujte nějak zmínky na internetu. Podobnou informaci někdo často někde utrousí a vy o ní vůbec nevíte. Pro začátek stačí třeba Google Alerts a monitorovat název domény. Jak na to jsem psal už dříve, v článku Monitoring médií na vlastní pěst - Google Alerts.
  • Zeptejte se tvůrce webu, zda je na produkčním webu vypnutý výpis chyb. Neprozrazujte, co není nutné. Stačí napsat, že nastala chyba.
  • Když už vám někdo pošle zprávu o tom, že máte na webu zranitelnost, poděkujte a opravte tu chybu. Posílá vám to proto, že chce poradit. Kdyby chtěl škodit, proč by vám o tom dával vědět?
  • Nakonec, pokud ignorujete všechno zmíněné, nedivte se.

Nepodceňujte bezpečnost webů. Stránky umí naprogramovat kdejaký student po pár hodinách učení se. O bezpečnosti ví ale málokdo. Během psaní článku nebyla zraněna žádná žabka ani jiný živý tvor. Utrpí snad jen ego programátorů, co web iŽabka slepili.