CSRF (Cross-Site Request Forgery)

Como Explorar

CSRF permite que um atacante induza um usuário autenticado a executar ações indesejadas em uma aplicação web na qual está autenticado. O atacante geralmente engana a vítima para clicar em um link ou submeter um formulário malicioso.

terminal
Exemplo:

<form action='https://site-vulneravel.com/transferir' method='POST'>
  <input type='hidden' name='valor' value='1000'>
  <input type='hidden' name='destino' value='atacante'>
  <input type='submit' value='Transferir'>
</form>
  • O usuário precisa estar autenticado no site alvo.
  • O atacante induz a vítima a acessar uma página/controlar um formulário.
  • O navegador envia automaticamente os cookies de sessão.

Por que acontece

CSRF ocorre quando a aplicação não valida a origem das requisições e confia apenas nos cookies de sessão. O navegador envia automaticamente os cookies, permitindo que requisições maliciosas sejam aceitas como legítimas.

  • Ausência de tokens anti-CSRF.
  • Falta de validação de origem (header Referer/Origin).
  • Requisições sensíveis aceitas apenas com cookie de sessão.

Como Corrigir

  • Implemente tokens anti-CSRF em formulários e requisições sensíveis.
  • Valide o header Origin e Referer no backend.
  • Evite aceitar requisições sensíveis apenas com cookie de sessão.
terminal
// Exemplo de validação de token CSRF em Node.js (Express)
app.post('/transferir', (req, res) => {
  if (req.body.csrfToken !== req.session.csrfToken) {
    return res.status(403).send('CSRF token inválido');
  }
  // ...processa transferência...
});