hacktricks/pentesting-web/hacking-with-cookies/cookie-tossing.md
2023-06-06 18:56:34 +00:00

4.2 KiB

Descrição

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.

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.

{% hint style="danger" %} 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" {% endhint %}

Isso pode ser perigoso, pois o atacante pode ser capaz de:

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

Ordem dos Cookies

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.

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;

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.

{% hint style="warning" %} 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. {% endhint %}

Bypass de Proteção

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.

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.

{% content-ref url="cookie-jar-overflow.md" %} cookie-jar-overflow.md {% endcontent-ref %}

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.

Bomba de Cookies

Um ataque de Cookie Tossing também pode ser usado para realizar um ataque de Cookie Bomb:

{% content-ref url="cookie-bomb.md" %} cookie-bomb.md {% endcontent-ref %}

Defesas

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

Referências