Cross-Site Request Forgery (CSRF)

14:59 Daniel Fest 0 Comentarios




O Cross-Site Request Forgery, mais conhecido como CSRF ou XSRF, é um ataque conhecido por forçar um usuário final a executar uma ação não desejada em uma aplicacão web em que ele está previamente autenticado. O ataque envolve a comunicação entre sites onde um dos domínios executa requisições a um outro sem o consentimento do usuário para realizar transações no site de destino.

A técnica depende também do browser do usuário e de como ele manipula os cookies de sessão do usuário e um pouco de engenharia social para que o alvo execute a requisição indesejada. As principais premissas do ataque são: o usuário deve ter uma sessão logada e válida com o domínio alvo; o usuário deve entrar em um domínio malicioso ou interagir de alguma maneira com este domínio (clique de botão, carregamento de URLs, etc).

Como funciona

Um exemplo clássico sobre este tipo de ataque é o da transferência de valores entre contas bancárias em um Internet Banking. Hoje em dia, maior parte das instituições possuem mecanismos de mitigação para este tipo de ataque, mas em termos mais rasos da vulnerabilidade ela pode ser entendida da seguinte maneira.

Como é realizada uma transferência bancária:
1. O usuário loga na plataforma de seu Internet Banking gerando um Cookie de autenticação mantido por seu navegador. 
2. Ao acessar a página de transferência de valores ele preenche um formulário contendo a conta bancária de destino e o valor da transferência.
3. Ao clicar no botão de envio, a página formata uma requisição ao servidor para que seja realizada a transação.

Onde o atacante entra neste fluxo.
1. Um usuário mal intencionado cria um domínio malicioso
2. Este domínio possui um botão qualquer para enganar o usuário, ou pode utilizar meios para executar uma ação assim que carregado.
3. Quando o usuário clica neste botão despretensiosamente ou simplesmente carrega a página, uma requisição ao site do banco é forjada enviando dados de conta e valor para a mesma página de transferência do banco.
4. Desta maneira, ao ser redirecionado a página de transferência do banco, o navegador resgata o Cookie daquela sessão já autenticada do usuário e executa a requisição enviada pelo outro domínio efetivando assim a transferência de valores a conta predeterminada pelo atacante nesta requisição.

Existem mais informações sobre como a vulnerabilidade pode ser testada na página da OWASP (https://wiki.owasp.org/index.php/Testing_for_CSRF_(OTG-SESS-005))

Mitigação
Existem alguns mecanismos básicos para tratativa da vulnerabilidade e algumas implementações variáveis de mitigação de acordo com a aplicação utilizada em seu site.
Dois destes mecanismos são amplamente conhecidos para implementação: a utilização do Cookie Same-Site e implementação de um Anti CSRF-Token.

Cookie Same-Site: o ataque CSRF só é possível por que o cookie é enviado pelo browser a qualquer requisição a um domínio a que este Cookie foi originado (definição de same-origin policy). Com esta flag o cookie só é enviado junto a requisição se ela for originada do mesmo domínio a que pertence, impossibilitando que ela seja inclusa em requisições oriundas de outro domínio. Sua única limitação é a necessidade de interpretação do browser quanto a essa flag, navegadores mais antigos ou até outros que tem retirado o recurso de consulta a esta flag tornam o mecanismo ineficaz a esse tipo de ataque.

Anti CSRF-Token: este meio de mitigação determina que seja implementado um mecanismo de troca de tokens entre cliente e servidor para validação de uma requisição. Um Token é predeterminado pelo servidor e inputado como invisível entre o formulário que sera enviado pelo cliente. Uma vez que o formulário é enviado, este token é enviado juntamente na requisição ao servidor que valida se é o mesmo token setado anteriormente pelo servidor, em caso positivo, a requisição é validada, caso contrário, descartada.
Com isto, ainda que o atacante forje uma requisição com um Token-CSRF, ela não será a mesma que será utilizada pelo usuário alvo quando ele visitar a página de seu domínio, sendo assim, quando a requisição forjada for enviada ao domínio alvo, o token enviado não será o mesmo token utilizado pelo usuário, invalidando, assim, a efetivação daquela request.


CORs: Existe um artigo em nosso blog detalhando mais sobre a utilização deste recurso (http://labs.siteblindado.com/2019/07/entenda-melhor-o-http-cors.html). Em termos mais simples ele pode ser utilizado como técnica de mitigação por que implementa  políticas de restrições de acesso de outros domínios delimitando domínios permitidos para consumirem conteúdo de seu site.

Outros meios de mitigacão e verificação da vulnerabilidade pode ser encontrado entre o Cheat Sheet da OWASP (https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.md_)

Conclusão
A vulnerabilidade é considerada séria, pois é bastante recorrente visto que poucos domínios implementam mecanismos para sua mitigação.  Ela já foi reportada entre as Top 10 da OWASP e hoje possui uma sessão única entre os tópicos do projeto.
A recorrência de ataques CSRF não e algo novo na internet, mas ainda assim muitas pessoas são vítimas desse tipo de técnica.

E você? já foi vítima de alguma página maliciosa que explorou essa vulnerabilidade?

E para você que tem uma página na internet, mas não sabe se seu domínio esta suscetível a este ataque e nem como pode prevenir ocorrências entre seus usuários, temos este tipo de verificação entre nossos produtos (Pentest, blindagem,...). Para saber mais, entre em contato conosco (https://www.siteblindado.com/contato/).

Fontes:
https://owasp.org/www-community/attacks/csrf
https://portswigger.net/web-security/csrf
https://www.acunetix.com/websitesecurity/csrf-attacks/

0 comentários: