6.6 Web Caches a jejich zranitelnosti (Poisoning, Deception)

Web Cache
Webová Cache se používá pro ukládání často využívaných zdrojů (typicky statické stránky, obrázky, scripty, fonty) za účelem snížení zátěže původního serveru a zrychlení odpovědi pro klienty. Pokud zdroj není v cache (X-Cache: miss), server jej stáhne, zašle odpověď, a odpověď se uloží do cache (pokud je to povoleno). Při dalším dotazu je již obsah doručen z cache (X-Cache: hit).

Co je to Cache Key?

Aby Cache věděla, jestli má podávat existující záznam, vyhodnocuje tzv. Cache Key. Ten obvykle obsahuje:

Parametry, které do klíče zahrnuty NEJSOU (typicky Cookie nebo určité request hlavičky), mohou být zneužitelné.

Web Cache Poisoning
Technika, při níž útočník zasláním speciálně vycraftěného requestu (s cílem vnutit mu zlomyslný obsah, jenž ale nespadá do Cache Key hodnocení – tzv. unkeyed vstupy) získá infikovanou response z originálního serveru, která je však cache serverem považována za legitimní pro danou adresu. Tuto pak Cache podstrčí i všem dalším, zcela legitimním klientům, pošlou-li si běžný požadavek.

Pro demonstraci při pentestech (aby nebyla rozbita reálná návštěvnost) se často do URI dává cachebuster parametr (např. /?doNotCacheThis=1), pro který se nakažený požadavek zpropaguje pouze po dobu pentesterova requestu.
Co může Web Cache Poisoning způsobit?
  • Stored XSS: Otrávením cache u stránky s obvykle nevyužitelnou (ale v cache neodrazenou) input hlavičkou jako User-Agent.
  • Změna cizího jazyka uživatelů: Útočník vyžádá domovskou stránku, jako unkeyed hodnotu přidá Cookie: language=jp; a pokud se japonská verze uková do cache s klíčem GET /, všichni uživatelé stránky najednou uvidí japonský obsah nezávisle na jejich předvolbách.
  • Redirekce: Podstrčením upravené X-Forwarded-For hlavičky, jež originální server navrátí jako cestu k redirektu.
  • DoS (Denial of Service): Otrávením cache payloadem, který spouští WAF pravidla – validní uživatel tak dostane od Cache rovnou WAF blokaci.
Web Cache Deception
Liší se od otravování. Zatímco u Poisoningu nutíme cache ukládat ZLÉ hodnoty, u Deception (klamání) nutíme legitimního uživatele do situace, kdy jeho vlastní PRIVÁTNÍ SENSITIVNÍ hodnoty propadnou do Veřejné Cache pod zdánlivě statickým jménem.

Útočník přesvědčí oběť k návštěvě unikátní modifikované URL (např. https://example.com/my-account/randomValue.js nebo https://example.com/my-account;randomValue.js). Prohlížeč i originální server považují požadavek za dotaz na citlivý dashboard (a zařadí ho tak). Cache server to však uvidí s domnělou koncovkou .js, myslí si, že je to statický obsah (na který Cache pravidla cílí), a vycachuje citlivá privátní data oběti pod toto fiktivní statické URL. Útočník na tento falešný JS odkaz přistoupí následně sám a vyčte privátní obsah z cache.