Ataques XSS (Cross-Site Scripting)
1. O que é XSS?
Cross-Site Scripting (XSS) é uma vulnerabilidade que permite a um invasor injetar código JavaScript malicioso em páginas visitadas por outros usuários. Quando o navegador da vítima executa esse código, o atacante pode:
- Roubar cookies ou tokens de sessão
- Redirecionar para sites de phishing
- Registrar teclas digitadas (keylogging)
- Modificar o conteúdo da página em tempo real
2. Tipos de XSS
- Refletido (Reflected XSS)
- O payload faz parte da URL ou de um parâmetro HTTP (GET/POST) e é “refletido” na resposta sem sanitização.
-
Exemplo de URL vulnerável:
-
Armazenado (Stored XSS)
- O script malicioso é salvo no servidor (em banco de dados, fórum, comentários) e servido a todos os visitantes.
-
Muito perigoso: afeta múltiplos usuários sem interação direta.
-
DOM-based XSS
- A injeção ocorre inteiramente no navegador, por meio de manipulação insegura do DOM em código JavaScript.
- Exemplo:
Se a URL forhttps://exemplo.com/#<script>alert(1)</script>
, o payload é executado.
3. Contextos de Injeção
Dependendo de onde o payload é colocado, varia a sintaxe:
Contexto | Exemplo de payload |
---|---|
HTML | <script>alert(1)</script> |
Atributo HTML | "><img src=x onerror=alert(1)> |
JavaScript inline | ";alert(1);// |
URL | javascript:alert(1) |
CSS | style="background:url(javascript:alert(1))" |
4. Exemplos Práticos
4.1 Reflected XSS
- Identifique um parâmetro refletido:
- Injete payload:
- Se o alerta disparar, há vulnerabilidade.
4.2 Stored XSS
- Acesse a área de comentários ou perfil de usuário.
- Insira:
- Verifique se o script é salvo e executado ao visitar a página.
4.3 DOM-based XSS
- Localize código JavaScript que usa
innerHTML
,document.write()
,eval()
, etc. - Abuse de valores controlados pelo usuário (hash, querystring, localStorage).
5. Testando e Explorando
- Navegador: usar console para testar injeções rápidas.
- Interceptadores (Burp Suite, OWASP ZAP): modificar parâmetros em tempo real.
-
Ferramentas automáticas:
-
XSStrike
XSSer
Dalfox
Exemplo com Burp Intruder:
- Defina a posição de injeção (
§
antes e depois do parâmetro). - Carregue wordlist de payloads (ex.: OWASP XSS Payloads).
- Dispare o ataque e analise respostas que contenham tags
<script>
.
6. Prevenção
-
Validação de entrada
-
Filtrar ou rejeitar caracteres perigosos (
<
,>
,"
,'
). -
Codificação de saída
-
Escapar valores antes de inseri-los em HTML, atributos, JS, CSS ou URLs.
-
CSP (Content Security Policy)
-
Restrinja fontes de scripts com cabeçalhos como
-
Flags de Cookie
-
HttpOnly
impede acesso a cookies via JavaScript. -
Secure
garante envio somente em HTTPS. -
Frameworks seguros
-
Utilize funções de template que façam escaping automático (React, Django, Rails, etc.).
Referências
- OWASP XSS Prevention Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
- OWASP Testing Guide – XSS: https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/07-Input_Validation_Testing/01-Testing_for_Reflected_Cross_Site_Scripting