hacktricks/pentesting-web/hacking-with-cookies/cookie-tossing.md

96 lines
7 KiB
Markdown
Raw Normal View History

# Cookie Tossing
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
### Description
2021-10-20 23:25:53 +00:00
2024-02-10 13:03:23 +00:00
Se un attaccante può **controllare un sottodominio o il dominio di un'azienda o trova un XSS in un sottodominio**, sarà in grado di eseguire questo attacco.
2021-10-19 00:01:07 +00:00
Come indicato nella sezione Cookies Hacking, quando un **cookie è impostato su un dominio (specificandolo) verrà utilizzato nel dominio e nei sottodomini.**
2021-10-19 00:01:07 +00:00
{% hint style="danger" %}
Pertanto, **un attaccante sarà in grado di impostare su dominio e sottodomini un cookie specifico facendo qualcosa come** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
2021-10-19 00:01:07 +00:00
{% endhint %}
Questo può essere pericoloso poiché l'attaccante potrebbe essere in grado di:
2021-10-19 00:01:07 +00:00
* **Fissare il cookie della vittima all'account dell'attaccante** in modo che se l'utente non se ne accorge, **eseguirà le azioni nell'account dell'attaccante** e l'attaccante potrebbe ottenere alcune informazioni interessanti (controllare la cronologia delle ricerche dell'utente nella piattaforma, la vittima potrebbe impostare la sua carta di credito nell'account...)
* Se il **cookie non cambia dopo il login**, l'attaccante potrebbe semplicemente **fissare un cookie (session-fixation)**, aspettare che la vittima effettui il login e poi **usare quel cookie per accedere come la vittima**.
* A volte, anche se i cookie di sessione cambiano, l'attaccante usa quello precedente e riceverà anche il nuovo.
* Se il **cookie imposta un valore iniziale** (come in flask dove il **cookie** può **impostare** il **token CSRF** della sessione e questo valore sarà mantenuto dopo che la vittima effettua il login), l'**attaccante potrebbe impostare questo valore noto e poi abusarne** (in quel scenario, l'attaccante potrebbe quindi far eseguire all'utente una richiesta CSRF poiché conosce il token CSRF).
* Proprio come impostare il valore, l'attaccante potrebbe anche ottenere un cookie non autenticato generato dal server, ottenere il token CSRF da esso e usarlo.
2021-10-19 00:01:07 +00:00
### Cookie Order
2021-10-19 00:01:07 +00:00
Quando un browser riceve due cookie con lo stesso nome **che influiscono parzialmente sullo stesso ambito** (dominio, sottodomini e percorso), il **browser invierà entrambi i valori del cookie** quando entrambi sono validi per la richiesta.
2021-10-19 00:01:07 +00:00
A seconda di chi ha **il percorso più specifico** o quale sia il **più vecchio**, il browser **imposterà prima il valore del cookie** e poi il valore dell'altro come in: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
2021-10-19 00:01:07 +00:00
La maggior parte **dei siti web utilizzerà solo il primo valore**. Quindi, se un attaccante vuole impostare un cookie, è meglio impostarlo prima che un altro venga impostato o impostarlo con un percorso più specifico.
2021-10-19 00:01:07 +00:00
{% hint style="warning" %}
Inoltre, la capacità di **impostare un cookie in un percorso più specifico** è molto interessante poiché sarà possibile far **lavorare la vittima con il suo cookie tranne che nel percorso specifico dove il cookie malevolo impostato verrà inviato prima**.
2021-10-19 00:01:07 +00:00
{% endhint %}
### Protection Bypass
2021-10-19 00:01:07 +00:00
Una possibile protezione contro questo attacco sarebbe che il **server web non accetti richieste con due cookie con lo stesso nome ma due valori diversi**.
2021-10-19 00:01:07 +00:00
Per bypassare lo scenario in cui l'attaccante sta impostando un cookie dopo che alla vittima è già stato dato il cookie, l'attaccante potrebbe causare un **cookie overflow** e poi, una volta che il **cookie legittimo è stato eliminato, impostare quello malevolo**.
2021-10-19 00:01:07 +00:00
{% content-ref url="cookie-jar-overflow.md" %}
[cookie-jar-overflow.md](cookie-jar-overflow.md)
{% endcontent-ref %}
Un altro utile **bypass** potrebbe essere **URL codificare il nome del cookie** poiché alcune protezioni controllano 2 cookie con lo stesso nome in una richiesta e poi il server decodificherà i nomi dei cookie.
2021-10-19 00:01:07 +00:00
### Cookie Bomb
2021-10-20 23:25:53 +00:00
Un attacco di Cookie Tossing può anche essere utilizzato per eseguire un **attacco Cookie Bomb**:
2021-10-20 23:25:53 +00:00
{% content-ref url="cookie-bomb.md" %}
[cookie-bomb.md](cookie-bomb.md)
{% endcontent-ref %}
### Defense**s**
2021-10-19 00:01:07 +00:00
#### **Usa il prefisso `__Host` nel nome del cookie**
2021-10-19 00:01:07 +00:00
* Se un nome di cookie ha questo prefisso, **verrà accettato** in una direttiva Set-Cookie solo se è contrassegnato come Sicuro, è stato inviato da un'origine sicura, non include un attributo Domain e ha l'attributo Path impostato su /
* **Questo impedisce ai sottodomini di forzare un cookie al dominio principale poiché questi cookie possono essere visti come "bloccati a livello di dominio"**
2021-10-19 00:01:07 +00:00
### References
2021-10-19 00:01:07 +00:00
2022-04-05 22:24:52 +00:00
* [**@blueminimal**](https://twitter.com/blueminimal)
* [**https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers**](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers)
* [**https://github.blog/2013-04-09-yummy-cookies-across-domains/**](https://github.blog/2013-04-09-yummy-cookies-across-domains/)
* [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg)
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}