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.