Cross-User Defacement

Z Wikipedie, otevřené encyklopedie

Cross-User Defacement je v informatice druh zranitelnosti webové aplikace založený na technice HTTP response splitting. Cílem útočníka je nahradit odpověď od serveru podvrženým dokumentem.

Popis zranitelnosti[editovat | editovat zdroj]

Předpokladem k provedení Cross-User Defacement je aby aplikace byla zranitelná na HTTP response splitting tj. nesmí být filtrovány znaky CR a LF a musí docházet k přesměrování.

Pokud jsou tyto dvě podmínky splněny, tak je útočník schopen vytvořit podvržený HTTP požadavek tak, aby rozdělil odpověď od serveru na odpovědi dvě a to s tím, že obsah druhé odpovědi je zcela v jeho režii. Původní požadovaný dokument prohlížeč zahodí a je nahrazen podvrženým dokumentem. Samozřejmě je nutné dodržet strukturu HTTP odpovědi.

Takto upravená stránka může být dále zneužita například k vylákání soukromých informací či hesel. K provedení útoku může útočník využít veřejně dostupný proxy server, který bude HTTP požadavky patřičně upravovat, nebo pomocí metod sociálního inženýrství přinutit oběť kliknout na upravený odkaz.

Struktura HTTP odpovědi[editovat | editovat zdroj]

Aby byl útok proveden, je nutné při upravování odpovědi zachovat její strukturu. První obsaženou informací v odpovědi je verze použitého protokolu a stavový kód.

HTTP/1.0 200 OK

Následují další, v tomto případě, ne moc zajímavé informace jako je datum, verze webového serveru, jazyk, etc. Pokud jsou vynechány, tak se nic neděje.

Date: Fri, 15 Oct 2004 08:20:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.8
X-Powered-By: PHP/4.3.8
Vary: Accept-Encoding,Cookie
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate
Content-Language: cs

Hlavičky popisující typ dat v odpovědi a obsah.

Content-Type: text/html
Content-length: 47
-- prázdný řádek --

A za prázdným řádkem je umístěn samotný dokument.

Útok na zranitelnou aplikaci[editovat | editovat zdroj]

Identifikace parametru pro přesměrování. Vložení nějaké hodnoty:

foo

Přechod na nový řádek pomocí znaků CR a LF:

%0d%0a

Nastavení Content-Length na nulu (Content-length: 0), kterou je nutné zakódovat jako URL do sekvence %200:

Content-length:%200

Vložení hlavičky další odpovědi (speciální znaky je nutné převést do URL kódování):

HTTP/1.1 200OK
Content-Type: text/html 
Content-length: 47
<html>Deface</html>
Odeslání dotazu.

Odesílaný dotaz by měl vypadat nějak takto:

foobar%0d%0aContent-length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-  
length:%2047%0d%0a%0d%0a<html>Deface</html>

Obrana[editovat | editovat zdroj]

Obranou před Cache poisoning je neumožnit útočníkovi provést HTTP Response Splitting, čehož lze dosáhnout odfiltrováním znaků CR a LF od všech uživatelských vstupů zejména tam, kde jsou hodnoty parametrů vkládány do hlaviček.

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]