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&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