O Que é XSS (Cross-Site Scripting)?
Cross-Site Scripting, ou XSS, é uma falha de segurança em sites que permite que atacantes adicionem scripts prejudiciais a páginas da web. Na maioria das vezes, esses scripts são escritos em JavaScript.
Se alguém visita uma página afetada por XSS, seu navegador executa o script do atacante. Isso pode resultar em cookies roubados, sessões sequestradas ou ações realizadas sem a permissão do usuário.
O XSS, assim como a Injeção de SQL, é regularmente listado no OWASP Top 10 como uma das vulnerabilidades mais comuns em aplicações web.
Como o XSS Funciona?
O XSS frequentemente tem como alvo aplicações web que não verificam e limpam corretamente a entrada do usuário.
Por exemplo, se uma caixa de comentários permite HTML bruto ou JavaScript sem qualquer filtragem, um atacante poderia adicionar um código como este:
<script>alert('Hacked!');</script>
Quando as vítimas visualizam a página, o código malicioso é executado dentro de seu navegador.
Por Que o XSS é Importante na Cibersegurança
O XSS pode levar a uma violação maior:
- Tomada de conta (roubo de cookies de sessão para se passar por usuários)
- Roubo de dados (captura de entradas de formulário como senhas ou cartões de crédito)
- Ataques de phishing (injeção de formulários de login falsos)
- Entrega de malware (redirecionamento de usuários para sites maliciosos)
Tipos de XSS
- XSS Baseado em DOM
- O ataque ocorre inteiramente no navegador manipulando o Document Object Model (DOM) sem envolver o servidor.
- XSS Armazenado
- Script malicioso é armazenado permanentemente no servidor, como no banco de dados, página de perfil.
- XSS Refletido
- Script é refletido de um servidor web (por exemplo, em URL ou mensagem de erro), o script será executado quando a vítima clicar no link criado pelos atacantes.
Como Prevenir XSS
- Sanitização de entrada & codificação de saída: sempre limpar os dados de entrada do usuário antes de processá-los, transformando a entrada do usuário em um formato seguro
- Usar Política de Segurança de Conteúdo (CSP): restringe quais scripts podem ser executados no navegador.
- Evitar eval() e JavaScript inline: para reduzir os riscos de injeção.
- Testes de segurança (DAST/IAST): realizar testes de segurança para detectar vulnerabilidades cedo
Exemplo em Caso Real - Verme Samy (MySpace, 2005)
O que aconteceu: Samy Kamkar publicou um perfil no MySpace que continha uma carga útil de XSS armazenado. Quando outros usuários visualizavam o perfil, a carga útil era executada em seus navegadores, (a) adicionava Samy como amigo, (b) acrescentava a frase “Samy é meu herói” aos seus perfis e (c) se replicava nas páginas de perfil desses usuários.
Impacto: O worm se auto-propagou para ~1 milhão de usuários em aproximadamente 20 horas, forçando o MySpace a ficar offline temporariamente.
Por que funcionou: O MySpace permitia HTML/atributos não escapados nos campos de perfil, possibilitando a execução de scripts armazenados nos navegadores dos visitantes.
Lições / correção: Codificação de saída adequada, sanitização de entrada, remoção de HTML nos campos de perfil e aplicação rápida de patches. Samy posteriormente enfrentou consequências legais, e o MySpace implementou filtros.
Termos Relacionados
- Injeção de SQL
- DAST (Teste Dinâmico de Segurança de Aplicações)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)