Cache Poisoning via URL discrepancies

Support HackTricks

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).

Delimiters

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.

Normalization & Encodings

  • 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.

Encodings

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.

Dot segment

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.

Static Resources

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.

Support HackTricks

Last updated