Ako sa nám podarilo získať neobmedzené kredity na Rohlik.cz

Pri mojom koncoročnom úsilí o využitie expirujúcich Sodexo bodov som natrafil na závažnú zraniteľnosť v Rohlik.cz, ktorá by útočníkovi dovolila získať prakticky neobmedzené kredity na nákup!

Popis zraniteľnosti

Pri snahe zbaviť sa svojich “straveniek” pred expiráciou, som na odporúčanie kolegu natrafil na web sodexorozvoz.cz. Táto služba ma ako dlhodobého zákazníka rohlik.cz veľmi potešila a preto som sa hneď pustil do nákupu. Pri kliknutí na uplatnenie zakúpeného poukazu na rohlik.cz/poukaz som ale nedokázal potlačiť nutkanie skúsiť túto citlivú časť stránky (eticky) napadnúť.

Rohlik.cz poukaz

Je viacero spôsobov, ako sa dá uplatnenie voucheru zneužiť, ale ten najčastejší je v princípe veľmi jednoduchý - skúsiť 1 poukaz uplatniť viackrát, a to vo veľmi krátkom časovom rozsahu. Klikanie v prehliadači by vám v tomto prípade nepomohlo, pretože veľmi malý časový rozsah v tomto kontexte znamená desatiny milisekundy.

V mojom prípade som odoslal 50 „dotazov“ na uplatnenie poukazu v rozmedzí 1 milisekundy. Vzhľadom k tomu, že server nezaručil atomicitu transakcie uplatnenia poukazu, tak až 11 z týchto dotazov bolo vyhodnotených ako valídne uplatnenie poukazu. Vďaka tomuto mi namiesto 1 000 Kč bolo pripísaných až 11 000 Kč v kreditoch.

Rohlik.cz kredity

Toto by samo o sebe reprezentovalo “len” 90% zľavu - veľmi prijateľné ceny, ale stále by sme museli platiť časť zo svojho. Sľubované neobmedzené kredity by to určite neboli.

Našťastie rohlik.cz dovoľuje za existujúce kredity nakúpiť ďalšie poukazy, ktoré vieme za pomoci tejto zraniteľnosti ďalej “zhodnotiť”. Za tieto zakúpené poukazy si potom môžeme zakúpiť 10x viac poukazov... Za tieto zhodnotené poukazy si potom môžeme zakúpiť 10x viac poukazov... a tak ďalej. V tomto čase by z našich iniciálnych 1 000 Kč na našom účte hypoteticky svietilo prvých 1 000 000 Kč!

Nákup poukazu na Rohlik.cz

Technické detaily

Nástrojov, ktoré vám dovolia odoslať HTTP request (“klik”) v požadovanej rýchlosti je viacero. Ja som použil Burp Turbo Intruder, ktorý poskytuje veľmi prívetivé užívateľské prostredie. Burp Suite je asi najpopulárnejší program používaný medzi etickými, aj menej etickými web hackermi. Turbo Intruder je špeciálny v tom, že dovoľuje synchronizáciu na úrovni posledného odoslaneho bajtu. Tvorca tohto nástroja, James Kettle, bol napríklad schopný týmto spôsobom do istej miery použiť 1 vyriešenú Google reCAPTCHu viackrát.

Samotná zraniteľnosť (jedna sa o príklad Time-of-check to time-of-use (TOCTOU) race-condition), spočíva v tom, že atomicita poukazov nie je zaručená na databázovej úrovní a webserver funguje na viacerých vláknach. Preto pri dobrom načasovaní môže nastať prípad, že sa validita poukazu verifikuje vo viacerých vláknach (v tomto prípade 11), a až potom jedno z týchto vlákien označí poukaz za použitý. Kód bežiaci v ostatných vláknach už ale verifikoval, že poukaz je validný, a preto ďalej pokračuje pripísaním kreditov na účet.

Ak by vás zaujímali ďalšie technické detaily tejto zraniteľnosti spolu s demonštráciou zraniteľného kódu, odporúčam prečítať si článok ohľadom race conditions.

Nahlásenie a oprava

Hypotetický scenár plného útoku našťastie nenastal a Rohliku som samozrejme túto zraniteľnosť okamžite po úspešnom potvrdení nahlásil. Samotné nahlásenie zraniteľnosti bolo výrazne zjednodušené skutočnosťou, že stránka rohlik.cz disponuje security.txt (bližšie o tom v článku Přidejte si na web soubor security.txt).

Už 5 minút po odoslaní emailu s detailmi o zraniteľnosti mi od pána Petra Urbana (QA & Security manager) prišiel email, v ktorom oznámil, že kontaktoval vývojárov a idú tento problém riešiť. Aj napriek vianočnému času boli tuto zraniteľnosť do pár dní schopní opraviť a spustiť na produkciu. Chcel by som týmto poďakovať p. Urbanovi za profesionálnu komunikáciu a promptné vyriešenie tohto problému.

Obrana pred podobnými zraniteľnosťami

Pre nezainteresovaných to môže znieť paradoxne, ale po tejto skúsenosti vo mne dôvera v rohlik.cz ešte stúpla - a to vďaka ich promptnej reakcii. Každá netriviálna webová aplikácia obsahuje, a bude obsahovať, chyby - dôležité je ich identifikovať čo najskôr v priebehu vývoja. Ak si myslíte, že tá vaša žiadne podobné kritické chyby nemá, pravdepodobne sa mýlite. :-)

V tejto sfére vašej firme môže výrazne pomôcť bezpečnostný audit (reálna simulácia útoku), bezpečnostné školenie pre vývojárov (aby sa naučili rozmýšľať ako útočník), a ako posledná línia obrany bug bounty program (odmena pre etických hackerov, ktorí vám zraniteľnosti nahlásia).

Veľmi radi vám s každou z týchto domén pomôžeme - stačí nás kontaktovať na info@tunasec.com.


Přidej se do našeho mailing listu

Chceš se dozvědět víc ohledně IT bezpečnosti? Tak si na správném místě.


TunaSec z.s.
Moldavská 527/3, Bohunice, 625 00 Brno
Phone  +420 774 071 231
Envelope  info@tunasec.com