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 --prázdný řádek-- <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
- http://www.owasp.org/index.php/Cache_Poisoning – Cache Poisoning na OWASP (anglicky)
- http://deadlytechnology.com/web-development/http-attack/ – HTTP Cache Poisoning on Deadly Technology (anglicky)
- http://yehg.net/lab/pr0js/training/webgoat.php – Řešení lekcí WebGoat (anglicky)
- http://www.securiteam.com/securityreviews/5WP0E2KFGK.html Archivováno 2. 12. 2010 na Wayback Machine (anglicky)