Exploit na mail u centrum.cz a atlas.cz
Objevil jsem bezpečnostní trhlinu na dvou velkých českých freemailech atlas.cz a centrum.cz, pomocí které je možné číst poštu libovolného uživatele.
Zranitelnost se nachází ve filtru, který odstraňuje potencionálně nebezpečné
HTML elementy, nacházející se v obsahu došlých emailů, formátovaných pomocí
HTML. Pomocí speciálně napsaného HTML kódu je možné filtr obejít a vložit do
těla emailu JavaScript. Pokud se uživatel přihlásí ke svému účtu přes webové
rozhraní a zlomyslný e-mail otevře, script se provede v kontextu jeho session
s webovým serverem.
Filtr kontrolující došlé emaily parsuje jejich obsah tak, že všechno, co se
nachází mezi znaky považuje za HTML tag, a to ostatní mimo za text.
V obsahu HTML tagu, tedy v řetězci, začínajícim znakem
pak hledá výskyt určitých klíčových slov a řetězec, nacházející se mimo nechá
bez povšimnutí. Hledaná klíčová slova představují konstrukce, kterými se do
HTML kódu vkládají různé client side scripty. Jsou to například názvy tagu
jako , a pak také názvy atributů onLoad,
onKeyPress, onMouseMove atd. Pokud něco takového nalezne, odstraní celý HTML
element nebo atribut, spolu s jeho hodnotou, protože tyto scripty umístěné v
obsahu emailové zprávy představují riziko pro bezpečnost webové aplikace.
Chyba parseru je v tom, že první výskyt znaku > po znaku < považuje vždy za
konec HTML tagu, i bez ohledu na to, že se znak > nachází v hodnotě atributu
uzavřené uvozovkami.
Např. tento kód
rozebere parser významově takto:
Atribut
se nachází v časti považované parserem zatext, a proto ho filtr neodstraní. Webový prohlížeč však část
bere jako atribut elementu IMG, kterým se přiradík události onLoad akce prováděná JavaScriptem. Po kompletním načtení obrázku
ze zadaného zdroje je vyvolána událost onLoad a JavaScript je proveden.
Atributy
a prohlížeč ignoruje.
Když už známe způsob, jak do těla emailu vložit JavaScript, zbývá jenom
možnost, jak toho šikovné využit. V uživatelském nastavení emailové schránky
je k dispozici funkce tzv. filtrů, prostřednictvím které si může uživatel
nastavit např. přeposílání kopií došlých emailů na jím zadanou emailovou
adresu. Nastavení se provede vyplněním a odesláním formuláře, ve kterém se
zadávají vlastnosti filtru. Formulář se odesílá pomocí HTTP protokolu metodou
GET nebo POST. Všechno, co potřebujeme je kód v JavaScriptu, který odešle data
z formuláře zvolenou metodou. Příklad takového scriptu, který nastaví filtr
pro přeposílání kopií došlých emailů na určitou adresu ve schránce na freemailu
centrum.cz je zde
Uvedený JavaScript je vhodné před vložením do odesílaného emailu ještě
zakódovat, aby znaky, které obsahuje nijak neovlivňovaly parsování HTML obsahu
kontrolním filtrem. Provede se to jednoduše. Posloupnost znaků, ze kterých se
JavaScript skládá se převede na posloupnost jejich ASCII hodnot, oddělených
čárkou např. řatězac ABCD se konvertuje na 65,66,67,68. K dekódovaní se pak
použije metoda fromCharCode() tridy String a řetězec, který vrátí se předá
funkci eval(). Funkce eval() vyhodnotí řetězec v jeho původní podobě jako
JavaScriptový kód.
Na závěr uvádim WSH script napsaný ve VBScriptu, který email s exploitem
sestaví a odešle. Pokud uživatel otevře email odeslany tímto scriptem přes
webové rozhraní freemailu centrum.cz, kopie všech zpráv, které následně
obdrží budou přeposlány na emalovou adresu, zadávanou jako vstupní argument.
Použití:
Článek naleznete i na autorově stránce: http://callplayer.wz.cz/clanek.txt
- Pro psaní komentářů se přihlašte



