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
[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]- http://www.owasp.org/index.php/Cross-User_Defacement (anglicky)
- http://www.securiteam.com/securityreviews/5WP0E2KFGK.html Archivováno 2. 12. 2010 na Wayback Machine. (anglicky)
- http://yehg.net/lab/pr0js/training/webgoat.php - Řešení lekcí WebGoat (anglicky)