O que é Cross Site Request Forgery?

Cross Site Request Forgery (CSRF), também conhecido como XSRF, Sea Surf ou Session Riding, é um vetor de ataque que aplica um truque no navegador web, fazendo com que ele execute uma ação indesejada na aplicação web alvo onde a vítima está logada.

Um ataque de Cross Site Request Forgery aplicado da forma correta, pode ser devastador tanto para a empresa quanto para seus usuários. Esse tipo de ataque pode arruinar a relação entre a empresa, seus funcinários e clientes, pois o ataque permite que um atacante realize por exemplo, transferências de fundos não autorizados, alteração de email, senha, realização de compras, dentre outros. Caso a vítima seja o administrador da aplicação web alvo, esse tipo de ataque pode levar ao comprometimento total da aplicação.

Cross Site Request Forgery é conduzido tipicamente com a ajuda da engenharia social, onde o atacante envia um email contendo um link para a vítima. Link esse que ao ser clicado realiza uma requisição forjada para a aplicação web alvo. Como a vítima provavelmente estará autenticada na aplicação alvo na hora do ataque, é impossível que a aplicação web alvo consiga distinguir entre uma requisição legítima de uma requisição forjada.

A imagem acima apresenta o seguinte cenário de ataque:

Antes de executar o ataque, o atacante irá estudar a aplicação web alvo, para que ele possa montar uma requisição forjada que se pareça com uma requisição legítima.

Por exemplo, uma requisição GET legítima para transferir 100 reais para a conta do João se parece com isso:

GET https://banco.com.br/transferencia.do?ContaDestino=joao&valor;=R$100 HTTP/1.1

Após conhecer qual requisição a aplicação web alvo realiza na hora da transferência, o atacante pode modifica-la para que a requisição forjada, quando executada transfira os 100 reais da conta da vítima para a conta do atacante. A seguir temos a requisição maliciosa:

GET https://banco.com.br/transferencia.do?ContaDestino=atacante&valor;=R$100 HTTP/1.1

Para realizar o ataque, o atacante envia um email para a vítima contendo o link da página web que ele criou. Essa página criada pelo atacante irá conter o seguinte código malicioso que irá realizar a requisição da transferência:

<a href=”GET https://banco.com.br/transferencia.do?ContaDestino=atacante&amp;valor;=R$100 HTTP/1.1″ data-wplink-edit=”true”>Clique aqui para ler a materia</a>

Ao clicar em “Clique aqui para ler a matéria” a requisição de transferência será realizada.

O atacante pode enviar o email contendo o link para todos os usuários do banco, e aqueles usuários que estiverem logado na aplicação do banco no momento em que clicarem em “clique aqui para ler a matéria” terão 100 reais transferidos de suas contas para a conta do atacante.

O exemplo apresentado acima é bem simples. O objetivo é explicar de forma simples como o ataque pode ocorrer. Apesar do exemplo mostrar uma requisição usando o método GET o ataque também funciona com o método POST, nesse caso a utilização de um formulário será necessário.

Um exemplo do mesmo ataque sendo realizado com o método POST seria algo do tipo:


Com isso, quando o usuário visitar uma página qualquer onde essa requisição POST esteja presente, o ataque ocorre.

Como se proteger de Cross Site Request Fogery?

Existem várias formas de prevenção. Do ponto de vista do usuário as melhores práticas são:

  • Realizar o logoff de aplicações web que não estão sendo utilizadas
  • Proteger nomes de usuários e senhas
  • Evitar utilizar a opção de auto login que muitos sites oferecem
  • Evitar navegar em vários sites simultaneamente, enquanto estiver logado em outros sites

Já do ponto de vista do programador a utilização de tokens unicos para cada requisíção gerada, impede que esse tipo de ataque ocorra. É bom lembrar que, se o atacante conseguir prever o próximo token a ser gerado, voltamos a estaca zero.

Referências:

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

https://www.acunetix.com/websitesecurity/csrf-attacks/

https://www.incapsula.com/web-application-security/csrf-cross-site-request-forgery.html

Web Application Hacker’s Handbook