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.

Komentáře

1

Na XSS je nachylno 90% podomacku psanych aplikaci. Mozna to cislo bude i horsi. Jinak mam ve FF rozhozeny layount.

http://www.error414­.com/media/ac­ci.png http://www.error414­.com/media/ac­ci2.png http://www.error414­.com/media/ac­ci3.png

error414 · 11. 5. 2007 · 19.10 · reagovat
2

[1] error414: Dobrej plán: acci příjde , klikne na ty tři obrázky a smázne si blog.

Šlaha · 11. 5. 2007 · 20.13 · reagovat
3

To me nenapadlo. :D acci neboj.

error414 · 11. 5. 2007 · 20.53 · reagovat
4

[1] error414: Díky za upozornění, zkusím to nějak popravit.

[2] Šlaha: Kde pak, tohle má WordPress „ošéfované“.

Acci · 11. 5. 2007 · 21.42 · reagovat
5

Pokud stále platí, že to vývojářům miniBB nikdo neoznámil a do zítřka odpoledne neoznání, rád tam napíšu. Bohužel dříve něž zítra odpoledne mít čas nebudu..

Tomik · 11. 5. 2007 · 23.52 · reagovat
6

O tomto bugu v miniBB už jsem slyšel (a bylo to dávno) – oni to ještě neopravili? To se mi skoro ani nechce věřit. Napsání bug reportu je otázka pěti minut, s dovolením jdu na to.

Charlie · 12. 5. 2007 · 8.40 · reagovat
7

Tak autoři miniBB už o problému vědí, vývoj můžete sledovat zde na stránkách miniBB.

Charlie · 12. 5. 2007 · 11.53 · reagovat
8

[6] Charlie: Opravdu? Tak to je mi potom divné, že tuto chybu již dávno někdo neopravil, IMHO je hodně závažná.

[7] Charlie: Teď už bude jen zajímavé sledovat, jak se tato chyba začne zneužívat. Naštěstí nejznámější diskusní fórum, provozované na miniBB u nás, je už imunní.

Acci · 12. 5. 2007 · 12.37 · reagovat
9

[8] Acci: Tohle není bug, tohle je katastrofa :) Snad se nic nezneužije a při troše štěstí problém do pár dnů opraví.

Charlie · 12. 5. 2007 · 13.31 · reagovat
10

[6] Charlie: Jasně, že napsat na bug-report je otázka 5-ti minut, ale když jsem tento článek četl, a reagoval na něj, bylo už k půlnoci, a tou dobou se moje jazykové schopnosti (jak v rodném jazyce, tak v jazycích cizích) dost limitně blíží nule.

Ale každopádně Ti patří dík, protože je to hodně závažný problém, je určitě záslužné o něm vývojáře informovat. :)

Tomik · 12. 5. 2007 · 19.24 · reagovat
11

[10] Tomik: Promiň jestli to vyznělo jako rejpnutí, o tom pětiminutovém bug reportu to bylo čisté konstatování :) Co se týče rychlosti informování tak je to sice fajn, ale plus mínus pár týdnů nehraje roli, je zbytečné se zde prát o každou vteřinu. Nicméně jsem zvědavý, jak se problém vyvine.

Charlie · 12. 5. 2007 · 21.59 · reagovat
12

[11] Charlie: V pohodě. Já taky… :)

Tomik · 12. 5. 2007 · 22.49 · reagovat
13

Pozor pozor! Dnes vyšla nová verze miniBB s opraveným XSS bugem. Nicméně řešení není zdaleka ideální, jediný bugfix, který tým vývojářů udělal bylo, že vyloučil znak & pro URL obrázků. Hezké, že? Pokud tedy do nového miniBB budete chtít vložit nějaký obrázek generovaný skriptem, nebo třeba přesměrovaný z jiné URL obsahující ampersand &, tak máte smůlu, neprojde to. Vývojáře jsem samozřejmě upozornil na to, že to není ani zdaleka vhodné řešení, tak uvidíme, co s tím budou dělat dál.

Charlie · 15. 5. 2007 · 19.29 · reagovat
14

A nestacilo by prepsat u toho DELETE skriptu GLOBALS na $_POST ??

kjn · 16. 5. 2007 · 20.56 · reagovat
15

[14] kjn: Samozřejmě stačilo, jenže vývojáři to nějak nechtějí pochopit a hledají špatné řešení.

Acci · 16. 5. 2007 · 21.33 · reagovat
16

Ten útok není XSS, ale XSRF (Cross-site request forgery)

DoubleThink · 17. 5. 2007 · 18.19 · reagovat
17

Uz je to vyreseno v nove verzi:

http://www.mi­nibb.net/forum­s/9_4661_0.html

S474N · 26. 5. 2007 · 19.45 · reagovat

Zanechte komentář

(vyžadováno)
(nebude zobrazen) (vyžadováno)

Můžete použít Texy! formátování.