Cross-User Defacement

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

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

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

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

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

Externí odkazy