Nebezpečné obrázky I.
Obrázky mají na webových stránkách obrovský význam. Někdy jen mají ilustrační charakter, jindy zase tvoří hlavní sdělení stránky. Mohou být ale také velmi nebezpečné, ovšem jen málo lidí si to uvědomuje.
Nejdřív špetka teorie…
Schválně si tipněte, co udělá prohlížeč, když na stránce nalezne tento kód:<img src="http://acci.cz/acci.jpg">
Ano, správně. Každý, kdo alespoň trochu umí HTML ví, že prohlížeč
se pokusí metodou GET otevřít
soubor acci.jpg, ovšem s cookie uživatele, který se obrázek
pokouší zobrazit, a pokud se jedná o obrázek, tak ho také
zobrazí. A to je důležité: pokusí se načíst soubor, i když se
nejedná o obrázek (což samozřejmě nemůže tušit, rozhodující je
MIME typ).
…a skokem do praxe
Použití této metody útoku, nazývané Cross-site scripting, (zkráceně XSS) budu popisovat na vcelku oblíbeném diskusním fórum miniBB. Možná se budete divit, ale už několik let obsahuje bezpečností díru, která dovolí prakticky komukoliv smazat celé fórum.Smazání tématu se v miniBB provádí kliknutím na odkaz, kde se zobrazí
formulář s otázkou, který se odesílá metodou POST a ke smazání tématu
dochází až po odeslání tohoto formuláře. To by se mohlo zdát jako
dostatečná ochrana, ovšem až do doby, než zjistíme, že miniBB je
tak „dobře“ naprogramováno, že využívá proměnné z pole
$_GLOBALS, tedy nezáleží, zda data budou odeslána pomocí
metody POST nebo GET.
Co z toho plyne? Že by mělo stačit do libovolného vlákna vložit příspěvek s obrázkem, který bude ve tvaru
[img]http://example.cz/index.php?action=deltopic&forum=2&topic={ID_prispevku}[/img]
a počkat, než jej navštíví přihlášený uživatel, který má právo mazat témata – tedy moderátor nebo administrátor.
Jenže takto jednoduše to nejde. miniBB totiž na tag
<img> převede pouze ty adresy, které mají příponu jpg,
gif nebo png. Ovšem tato ochrana jde velmi jednoduše obejít, a to
přidáním dalšího libovolného parametru do URL s hodnotou
.jpg, tedy například:
[img]http://example.cz/index.php?action=deltopic&forum=2&topic={ID_prispevku}&oblbnem=.jpg[/img]
Pak už si jen stačí vytvořit několik takových „obrázků“ a vložit je do příspěvku. Moderátor navíc po navštívení vlákna s tímto problémem nic dělat, když už si ho všimne (pokud vůbec), může být již celé fórum nadobro smazáno. Pokud vím, tato chyba se týká i nejnovější verze tohoto diskusního fóra, takže tato chyba je stále neopravena. Pokud někdo umíte anglicky, budu rád, pokud o této chybě vývojářům napíšete. Já bohužel tak dobře anglicky neumím.
V příštím díle si ukážeme, které všechny aplikace jsou pomoci tohoto problému zneužitelné a zjistíme, jak se u vlastních aplikací tomuto útoku bránit.
Edit: 15. května vyšla verze 2.0.4a, která by chybu měla opravovat, ovšem nestalo se tak.

(8×)