O que é falsificação de solicitação entre sites?

CSRF ou Cross-Site Request Forgery é uma vulnerabilidade de site onde um invasor pode fazer com que uma ação aconteça na sessão de uma vítima em outro site. Uma das coisas que torna o CSRF um risco tão grande é que ele nem mesmo exige a interação do usuário, tudo o que é necessário é que a vítima visualize uma página da web com o exploit.

Dica: CSRF geralmente é pronunciado letra por letra ou como “ondas do mar”.

Como funciona um ataque CSRF?

O ataque envolve o invasor criando um site que possui um método de fazer uma solicitação em outro site. Isso pode exigir interação do usuário, como fazer com que ele pressione um botão, mas também pode ser sem interação. Em JavaScript, existem maneiras de fazer com que uma ação aconteça automaticamente. Por exemplo, uma imagem de zero por zero pixel não será visível para o usuário, mas pode ser configurada para que seu "src" faça uma solicitação a outro site.

JavaScript é uma linguagem do lado do cliente, o que significa que o código JavaScript é executado no navegador, e não no servidor da web. Graças a este fato, o computador que faz a solicitação de CSRF é na verdade o da vítima. Infelizmente, isso significa que a solicitação é feita com todas as permissões que o usuário possui. Uma vez que o site de ataque enganou a vítima para fazer a solicitação CSRF, a solicitação é essencialmente indistinguível do usuário que faz a solicitação normalmente.

CSRF é um exemplo de “ataque de deputado confuso” contra o navegador da Web, pois o navegador é induzido a usar suas permissões por um invasor sem esses privilégios. Essas permissões são seus tokens de sessão e autenticação para o site de destino. Seu navegador inclui automaticamente esses detalhes em qualquer solicitação que fizer.

Os ataques CSRF são um tanto complexos de organizar. Em primeiro lugar, o site de destino precisa ter um formulário ou URL que tenha efeitos colaterais, como a exclusão de sua conta. O invasor precisa então fazer uma solicitação para executar a ação desejada. Finalmente, o invasor precisa fazer com que a vítima carregue uma página da web com o exploit enquanto ela está conectada ao site de destino.

Para evitar problemas de CSRF, a melhor coisa a fazer é incluir um token CSRF. Um token CSRF é uma string gerada aleatoriamente que é definida como um cookie. O valor precisa ser incluído em cada resposta ao lado de um cabeçalho de solicitação que inclui o valor. Embora um ataque CSRF possa incluir o cookie, não há como determinar o valor do token CSRF para definir o cabeçalho e, portanto, o ataque será rejeitado.