Cache poisoning

Cache poisoning je v informatice druh zranitelnosti webové aplikace založený na technice HTTP response splitting. Cílem útočníka je přesvědčit webový prohlížeč uživatele, aby uložil určitou stránku do své cache.

Popis zranitelnosti

Předpokladem k provedení Cache poisoning 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í. Cache poisoning je z části shodná s Cross-User Defacement. Útočník též chce, aby server odeslal klientovi jím vytvořenou odpověď s podvrženým dokumentem, přičemž navíc musí odpověď přijít z budoucnosti.

Prohlížeč automaticky ukládá na určitou dobu příchozí data do své vyrovnávací paměti, k čemuž dochází vždy, když není tato možnost v prohlížeči zakázána nebo není serverem posílána hlavička Cache-Control: no-cache nebo Pragma: no-cache v protokolu HTTP 1.0. Webová stránka je po své expiraci z cache odstraněna. Cache je vyčištěna též při ukončení prohlížeče.

Pokud se útočníkovi podaří nastavit hlavičku Last-Modified do budoucnosti, je dokument uložen do cache prohlížeče do doby, než dojde k její expiraci a tím i k odstranění z cache nebo dokud není prohlížeč ukončen. Pokud je čas poslední změny ve vzdálené budoucnosti, bude takto uložena stránka uložena v cache prohlížeče dlouhou dobu.

Po této hlavičce zase následuje podvržení dokumentu. Samozřejmě je nutné dodržet strukturu odpovědi.

Útok na zranitelnou aplikaci

Vložení nějaké hodnoty:

foobar

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 

Vynechání jednoho řádku:

%0d%0a%0d%0a

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
Last-Modified: Mon, 27 Oct 2015 14:50:18 GMT 
Content-length: 47

<html>Deface</html>

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%0aLast-Modified:%20Mon,%2027%20Oct%202015%2014:50:18%20GMT%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