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

61 lines
4.2 KiB
Markdown
Raw Normal View History

2023-06-06 18:56:34 +00:00
## Descrição
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
Se um atacante puder **controlar um subdomínio ou o domínio de uma empresa ou encontrar um XSS em um subdomínio**, ele poderá realizar esse ataque.
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
Como indicado na seção de Hacking de Cookies, quando um **cookie é definido para um domínio (especificando-o), ele será usado no domínio e subdomínios.**
2021-10-19 00:01:07 +00:00
{% hint style="danger" %}
2023-06-06 18:56:34 +00:00
Portanto, **um atacante poderá definir para o domínio e subdomínios um cookie específico fazendo algo como** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
2021-10-19 00:01:07 +00:00
{% endhint %}
2023-06-06 18:56:34 +00:00
Isso pode ser perigoso, pois o atacante pode ser capaz de:
2021-10-19 00:01:07 +00:00
2023-06-06 18:56:34 +00:00
* **Fixar o cookie da vítima na conta do atacante** para que, se o usuário não perceber, **ele realizará as ações na conta do atacante** e o atacante pode obter algumas informações interessantes (verificar o histórico das pesquisas do usuário na plataforma, a vítima pode definir seu cartão de crédito na conta...)
* Se o **cookie não mudar após o login**, o atacante pode apenas **fixar um cookie**, esperar até que a vítima faça login e, em seguida, **usar esse cookie para fazer login como a vítima**.
* Se o **cookie estiver definindo algum valor inicial** (como no flask onde o **cookie** pode **definir** o **token CSRF** da sessão e esse valor será mantido após o login da vítima), o **atacante pode definir esse valor conhecido e depois abusar dele** (neste cenário, o atacante pode então fazer o usuário realizar uma solicitação CSRF, pois ele conhece o token CSRF).
2021-10-19 00:01:07 +00:00
2023-06-06 18:56:34 +00:00
## Ordem dos Cookies
2021-10-19 00:01:07 +00:00
2023-06-06 18:56:34 +00:00
Quando um navegador recebe dois cookies com o mesmo nome **afetando parcialmente o mesmo escopo** (domínio, subdomínios e caminho), o **navegador enviará ambos os valores do cookie** quando ambos forem válidos para a solicitação.
2021-10-19 00:01:07 +00:00
2023-06-06 18:56:34 +00:00
Dependendo de quem tem **o caminho mais específico** ou qual é o **mais antigo**, o navegador **definirá o valor do cookie primeiro** e depois o valor do outro como em: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
2021-10-19 00:01:07 +00:00
2023-06-06 18:56:34 +00:00
A maioria dos **sites usará apenas o primeiro valor**. Então, se um atacante quiser definir um cookie, é melhor defini-lo antes que outro seja definido ou defini-lo com um caminho mais específico.
2021-10-19 00:01:07 +00:00
{% hint style="warning" %}
2023-06-06 18:56:34 +00:00
Além disso, a capacidade de **definir um cookie em um caminho mais específico** é muito interessante, pois você poderá fazer com que a **vítima trabalhe com seu cookie, exceto no caminho específico onde o cookie malicioso definido será enviado primeiro**.
2021-10-19 00:01:07 +00:00
{% endhint %}
2023-06-06 18:56:34 +00:00
## Bypass de Proteção
2021-10-19 00:01:07 +00:00
2023-06-06 18:56:34 +00:00
A possível proteção contra esse ataque seria que o **servidor web não aceitasse solicitações com dois cookies com o mesmo nome, mas dois valores diferentes**.
2021-10-19 00:01:07 +00:00
2023-06-06 18:56:34 +00:00
Para contornar o cenário em que o atacante está definindo um cookie depois que a vítima já recebeu o cookie, o atacante poderia causar uma **sobrecarga de cookie** e, em seguida, uma vez que o **cookie legítimo é excluído, definir o malicioso**.
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 %}
2023-06-06 18:56:34 +00:00
Outro **bypass** útil poderia ser **codificar em URL o nome do cookie**, pois algumas proteções verificam se há 2 cookies com o mesmo nome em uma solicitação e, em seguida, o servidor decodificará os nomes dos cookies.
2021-10-19 00:01:07 +00:00
2023-06-06 18:56:34 +00:00
## Bomba de Cookies
2021-10-20 23:25:53 +00:00
2023-06-06 18:56:34 +00:00
Um ataque de Cookie Tossing também pode ser usado para realizar um ataque de **Cookie Bomb**:
2021-10-20 23:25:53 +00:00
{% content-ref url="cookie-bomb.md" %}
[cookie-bomb.md](cookie-bomb.md)
{% endcontent-ref %}
2023-06-06 18:56:34 +00:00
## Defesas
2021-10-19 00:01:07 +00:00
2023-06-06 18:56:34 +00:00
### Use o prefixo `__Host` no nome do cookie
2021-10-19 00:01:07 +00:00
2023-06-06 18:56:34 +00:00
* Se um nome de cookie tiver esse prefixo, ele **será aceito apenas** em uma diretiva Set-Cookie se for marcado como seguro, foi enviado de uma origem segura, não inclui um atributo de domínio e tem o atributo de caminho definido como /
* **Isso impede que subdomínios forcem um cookie para o domínio principal, já que esses cookies podem ser vistos como "bloqueados no domínio"**
2021-10-19 00:01:07 +00:00
2023-06-06 18:56:34 +00:00
## Referências
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/)