Po skončení analýzy „otevřených“ adresářů jsme se s kolegy z ALEF CSIRT v posledním kvartálu loňského roku rozhodli podívat na bezpečnost českého webu z drobně jiného úhlu a zkusit zjistit, jak častým úkazem jsou na něm stránky, s pomocí nichž je možné dosáhnout otevřeného přesměrování. V obecné rovině je otevřené, nebo také „nevalidované“ přesměrování (v angličtině „open redirection“), zranitelnost, umožňující provést přesměrování prohlížeče z postižených stránek na nové URL bez souhlasu nebo vědomí jejich návštěvníka.
V praxi bývají touto zranitelností nejčastěji postiženy weby, jejichž autoři užívají místo přímých odkazů na externí URL (<a href="https://www.new.site/">
) odkazy na určitý interní mechanismus, který přijímá cílové externí URL jako parametr a následně na něj prohlížeč přesměruje (<a href="https://www.current.site/redirect?to= hxxps://www.new.site/">
). Přestože se na první pohled může zdát, že popsaný postup je zbytečně komplikovaný, jde o relativně často užívanou techniku. Důvodem k tomu je především možnost následného jednoduchého sledování počtů prokliků na jiné weby, což může být hodnotná informace pro potřeby marketingu nebo reklamy.
Použití obdobných „přesměrovávacích“ mechanismů nutně neznamená bezpečnostní problém. Většina webů, které je využívají, umožňuje provádět s jejich pomocí přesměrování pouze na vybrané domény – takové, které jsou např. obsažené v interní databázi „povolených“ cílů. Popsané řešení však bude potenciálně zneužitelné, pokud mechanismus na straně serveru bez jakékoli filtrace nebo dalšího ověření přesměruje prohlížeč na libovolné URL, které mu bylo předané jako parametr v HTTP GET požadavku.
Je pravdou, že taková zranitelnost není pro většinu webů, které jsou jí postiženy, závažným problémem. Hypoteticky je sice možné zkonstruovat odkaz, který na zranitelnou stránku ukazuje, ale přitom fakticky vede na jiný web, nicméně praktický dopad takové zranitelnosti je poměrně nízký. Výjimkou je situace, kdy popsaný zranitelný mechanismus užívá na svých stránkách známá a vysoce důvěryhodná instituce, například banka. V takovém případě je pro hypotetického útočníka velmi jednoduché připravit phishingovou kampaň, která působí důvěryhodně, neb všechny odkazy v e-mailu skutečně ukazují na web banky, ale uživatele dovede na podvodné stránky. Pokud by si uživatel v takovém případě nevšiml změny domény v adresním řádku prohlížeče, k níž v důsledku přesměrování došlo, mohl by například velmi snadno odevzdat útočníkovi přístup ke svému internetovému bankovnictví, nebo jiné citlivé údaje.
Je na místě poznamenat, že na odkaz typuhttps://www.banka.site/redirect?to=hxxps://www.fake.site
by zřejmě ostražitý uživatel nekliknul, v případě vhodného použití URL kódování a dalších obfuskačních technik je nicméně možné cíl přesměrování i skutečnost, že k přesměrování dojde, skrýt velmi efektivně – například:
https://www.banka.site/%72%65%64%69%72%65%63%74%3f%74%6f%3d%68%74%74%70%73%3a%2f%2f%77%77%77%2e%66%61%6b%65%2e%73%69%74%65
Vzhledem k jejich snadné – byť pro útočníky ne vždy zajímavé – zneužitelnosti a skutečnosti, že se s open redirection zranitelnostmi potkáváme často nejen při penetračních testech, ale i při běžném procházení webu, jsme se tak rozhodli v rámci pokračujícího zkoumání bezpečnosti českého webu zaměřit právě na ně a koncem října 2018 jsme tak začali hledat zranitelné stránky.
Nejen .CZ
Od původního záměru hledat zranitelné weby jen v ccTLD CZ jsme se nakonec drobně odchýlili. Přestože jsme cílili zejména na české stránky, rozhodli jsme se nakonec podívat alespoň zběžně i v jiných TLD, a to zejména proto, že se nám souběžně s výzkumem, v rámci běžného brouzdání po webu, podařilo najít otevřené přesměrování i na poměrně významných zahraničních webech, které by mohly být pro phishingové kampaně snadno využity. Jako příklad takového webu (který byl v návaznosti na naše upozornění již záplatován) lze uvést například www.washingtonpost.com.
Stejně jako při vyhledávání otevřených adresářů jsme chtěli být vůči cizím systémům maximálně neinvazivní a záměrně jsme se vyhnuli provádění jakýchkoli aktivních skenů. Opět jsme se tak museli spolehnout převážně na data z Googlu. S pomocí jednoduchých dorků jsme v nich hledali různé indikátory přítomnosti open redirection zranitelností a následně manuálně prováděli jejich validaci.
„Přesměrovávačů“ jsme popsaným způsobem analyzovali do ukončení akce v lednu tohoto roku okolo tisíce. Podařilo se nám při tom identifikovat celkem 162 takových, které jsou zranitelné, z toho 114 v rámci naší národní domény a 48 v jiných TLD. Zahraničních webů by bylo pochopitelně možné najít mnohem více, nicméně jak je uvedeno výše, převážná většina našich snah cílila na odhalení zranitelností postihujících weby „domácí“.
Zřejmě nejpodstatnějším, co jsme v českých luzích a hájích našli, byly dvě zranitelnosti na stránkách bank. Za potenciálně zajímavé pro útočníky lze však považovat i zranitelnosti, které postihovaly stránky nejmenovaného ministerstva nebo web jedné z velkých televizních stanic. Je vhodné poznamenat, že ve všech výše uvedených případech již byly nalezené zranitelnosti záplatovány.
Vedle již zmíněných stránek jsme otevřené přesměrování objevili v české části webu i na 11 stránkách, které byly svým obsahem zaměřeny na informační technologie, 15 zpravodajských portálech, 11 stránkách organizací zaměřených na obchod, 11 webech státních institucí a institucí veřejné správy nebo 16 portálech věnovaných volnočasovým aktivitám a koníčkům. Mimo naši národní doménu pak stojí za zmínku jedna sociální síť nebo stránky tří významných globálních korporací. Celkové procentuální rozdělení výsledků dle zaměření zranitelných webů je shrnuto v následujícím grafu.
Nečekané zjištění
Při procházení seznamu zranitelných URL, který jsme nasbírali, jsme si všimli opakovaného výskytu jedné zvláštní sekvence znaků. Na většině stránek byly zranitelné přesměrovávací mechanismy vytvořeny specificky pro potřeby konkrétního webu. Byly tak přístupné přes různé cesty na různých doménách a používaly odlišně pojmenované parametry. Mnohdy navíc vyžadovaly použití dvou nebo tří parametrů současně, aby přesměrování proběhlo korektně. O to podivnější se zdál být opakovaný výskyt URL ve tvaru http://vulnerable.site/modules/babel/redirect.php?newlang=hodnota&newurl=hodnota
v našich výsledcích.
Po bližší analýze několika webů, u nichž cesta ke zranitelné komponentě odpovídala výše uvedenému tvaru, jsme dospěli k zajímavému zjištění – na vině byl vždy standardní modul pro CMS použité na daných stránkách. Zmiňovaným CMS byl CMS Made Simple (CMSMS), jeden z méně známých open source redakčních systémů založených na PHP. A zranitelným rozšířením pro toto CMS byl Babel – modul umožňující jednoduchým způsobem hostovat na stránkách vícejazyčný obsah. Po analýze kódu problematické komponenty (více informací je k dispozici na untrustednetwork.net) jsme kontaktovali jejího autora. Ten nás informoval, že Babel je v současnosti opuštěným projektem a zranitelnost se tak bohužel opravy nedočká.
V zájmu omezení používání zranitelné komponenty jsme tak alespoň několika kanály publikovali veřejné varování o existenci zmíněné zranitelnosti. Přestože nelze předpokládat, že by se tato informace dostala ke všem, kteří Babel na svých stránkách používají, doufejme, že alespoň některým stávajícím uživatelům pomůže, a že bude dostatečně pádným argumentem, proč se použití jmenované komponenty v nových projektech vyhnout.
Kontakt postižených subjektů a reakce
Provozovatele webových stránek, pro které by mohly open redirection zranitelnosti představovat závažný bezpečnostní problém (např. výše zmíněné banky nebo vybrané státní instituce), jsme kontaktovali s pomocí e-mailu přímo a na přítomnost zranitelností je upozornili. S informováním ostatních postižených subjektů z České republiky nám pak opět pomohli kolegové z CZ.NIC, za což jim tímto mnohokrát děkujeme. V podstatě všechny zahraniční i tuzemské vlastníky zranitelných webů jsme se navíc pokusili kontaktovat i s pomocí portálu Open Bug Bounty.
Reakční doby se, stejně jako doby oprav, výrazně lišily. Velmi rychle reagovaly například obě zmíněné banky a do 24 hodin od předání informace o existenci zranitelností své weby odpovídajícím způsobem záplatovaly. V případě některých jiných webů pak byla doba mezi reakcí na námi zaslané varování a aplikací odpovídajících záplat i několik měsíců, pokud k záplatování (případně reakci) vůbec došlo.
Při opětovné analýze na začátku března 2019 jsme zjistili, že v rámci domény CZ došlo v reakci na naše varování k záplatování necelých 36 % webů, na nichž jsme zranitelnosti objevili. Mimo naší národní doménu pak tato hodnota činila lehce přes 18 %. Přestože – jak je uvedeno výše – open redirection zranitelnosti nejsou extrémně závažným problémem, nelze než doufat, že obě uvedené hodnoty budou v průběhu letošního roku ještě stoupat.