Cache Poisoning via URL discrepancies
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ovo je sažetak tehnika predloženih u postu https://portswigger.net/research/gotta-cache-em-all kako bi se izvršili napadi na trovanje kešom zloupotrebom razlika između keš proxy servera i web servera.
Cilj ovog napada je da natera keš server da pomisli da se učitava statički resurs tako da ga kešira dok keš server čuva deo putanje kao ključ keša, ali web server odgovara rešavajući drugu putanju. Web server će rešiti pravu putanju koja će učitavati dinamičku stranicu (koja može čuvati osetljive informacije o korisniku, zlonamerni payload poput XSS ili preusmeravanje za učitavanje JS datoteke sa napadačeve veb stranice, na primer).
URL delimiters se razlikuju u zavisnosti od okvira i servera, utičući na to kako se zahtevi usmeravaju i kako se odgovori obrađuju. Neki uobičajeni delimiters su:
Tačka i zarez: Koristi se u Spring-u za matrične promenljive (npr. /hello;var=a/world;var1=b;var2=c
→ /hello/world
).
Tačka: Specifikuje format odgovora u Ruby on Rails (npr. /MyAccount.css
→ /MyAccount
).
Null Byte: Skraćuje putanje u OpenLiteSpeed (npr. /MyAccount%00aaa
→ /MyAccount
).
Nov red: Razdvaja komponente URL-a u Nginx-u (npr. /users/MyAccount%0aaaa
→ /account/MyAccount
).
Drugi specifični delimiters mogu se naći prateći ovaj proces:
Korak 1: Identifikovati ne-kešabilne zahteve i koristiti ih za praćenje kako se URL-ovi sa potencijalnim delimiterima obrađuju.
Korak 2: Dodati nasumične sufikse putanjama i uporediti odgovor servera kako bi se utvrdilo da li karakter funkcioniše kao delimiter.
Korak 3: Uvesti potencijalne delimiters pre nasumičnog sufiksa da se vidi da li se odgovor menja, što ukazuje na korišćenje delimiter-a.
Svrha: URL parseri u keš i izvor serverima normalizuju URL-ove kako bi izvukli putanje za mapiranje krajnjih tačaka i ključeve keša.
Proces: Identifikuje delimitere putanje, izvlači i normalizuje putanju dekodiranjem karaktera i uklanjanjem tačaka-segmenta.
Različiti HTTP serveri i proxy serveri poput Nginx-a, Node-a i CloudFront-a dekodiraju delimitere na različite načine, što dovodi do nedoslednosti među CDN-ima i izvor serverima koje bi mogle biti iskorišćene. Na primer, ako web server izvrši ovu transformaciju /myAccount%3Fparam
→ /myAccount?param
, ali keš server zadrži kao ključ putanju /myAccount%3Fparam
, postoji nedoslednost.
Način da se proveri za ove nedoslednosti je slanje zahteva URL kodirajući različite karaktere nakon učitavanja putanje bez ikakvog kodiranja i provera da li je odgovor kodirane putanje došao iz keširanog odgovora.
Normalizacija putanje gde su uključene tačke je takođe veoma zanimljiva za napade na trovanje kešom. Na primer, /static/../home/index
ili /aaa..\home/index
, neki keš serveri će keširati ove putanje sa samima sobom kao ključevima dok drugi mogu rešiti putanju i koristiti /home/index
kao ključ keša.
Baš kao i ranije, slanje ovakvih zahteva i provera da li je odgovor prikupljen iz keša pomaže u identifikaciji da li je odgovor na /home/index
odgovor koji je poslat kada su te putanje zatražene.
Nekoliko keš servera će uvek keširati odgovor ako je identifikovan kao statički. Ovo može biti zbog:
Ekstenzije: Cloudflare će uvek keširati datoteke sa sledećim ekstenzijama: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx
Moguće je naterati keš da čuva dinamički odgovor koristeći delimiter i statičku ekstenziju kao što je zahtev za /home$image.png
koji će keširati /home$image.png
, a izvor server će odgovoriti sa /home
Poznate statičke direktorijume: Sledeći direktorijumi sadrže statičke datoteke i stoga bi njihov odgovor trebao biti keširan: /static, /assets, /wp-content, /media, /templates, /public, /shared
Moguće je naterati keš da čuva dinamički odgovor koristeći delimiter, statički direktorijum i tačke kao: /home/..%2fstatic/something
će keširati /static/something
, a odgovor će biti /home
Statičke direktorijume + tačke: Zahtev za /static/..%2Fhome
ili za /static/..%5Chome
može biti keširan kao takav, ali odgovor može biti /home
Statičke datoteke: Neke specifične datoteke se uvek keširaju kao što su /robots.txt
, /favicon.ico
, i /index.html
. Što se može zloupotrebiti kao /home/..%2Frobots.txt
gde keš može čuvati /robots.txt
, a izvor server odgovara na /home
.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)