Cross-site scripting
Cross-site scripting (XSS) é uma forma de inserir códigos maliciosos que não tratam os conteúdos que são gerados dinamicamente pelos usuários.
Os ataques XSS podem ser escritos em várias linguagens: HTML, JavaScript, VBScript, ActionScript e outros.
“Vulnerabilidades de XSS vem desde 1996 no início da Web. Um tempo onde não existiam grandes aplicações comerciais e milhares de páginas eram escritas apenas com HTML e a linguagem de programação JavaScript entrou em cena, prenúncio de um desconhecido código dinâmico para páginas web, que mudou a segurança das aplicações para sempre.” (FOGIE; GROSSMAN; HANSEN; PETKOV; RAGER, 2007, p. 2).
Principais técnicas / formas de ataque:
- Ataque XSS de reflexão
- Ataque XSS de armazenamento
- Ataque XSS baseado em DOM
Ataque XSS de reflexão
Usado para verificar se o site possui a vulnerabilidade XSS. Apenas o usuário que está realizado o XSS verá o resultado.
Para identificar a vulnerabilidade basta usar algum campo de entrada e verificar se permite a execução de scripts, exemplo:
Esse teste consiste em verificar se a aplicação executará o script.
Outra forma de testar a vulnerabilidade de XSS é por meio dos parâmetros passados via URL, exemplo:
Ataque XSS de armazenamento
A aplicação permite entradas de dados com scripts. Os scripts são armazenados no banco de dados da aplicação. A cada vez que os dados contendo scripts são consultados eles são executados.
Ataque XSS baseado em DOM
A aplicação permite entrada de dados com scripts. Esses scripts manipulam o Document Object Model (DOM) da página. Pode ser usado para incluir ou remover informações na página.
O XSS também permite a manipulação do DOM da página html, exemplo:
Como previnir
Como prevenir ou garantir a segurança?
- Técnicas de Sanitização (verificação de entrada, seleção indireta, cleansing, conversão, ferramentas)
- Constante atualizações de software (Patches/Fixes)
- Ferramentas especializadas (WAF, Proxys, IDS)
- Auditoria de código (processo + ferramentas)
- Testes de invasão (pessoas + ferramentas)
- Aplicação de boas práticas de configuração e design de software
- Gestão de conhecimento
- Comprometimento de alta gestão
Previnindo a vulnerabilidade XSS na sua aplicação web Java
Em uma aplicação que utiliza páginas JSP, quando imprimimos os dados diretamente com:
Estamos vulneráveis ao XSS, a tag c:out
possui e escape de caracteres que impede o ataque com XSS:
Se sua aplicação usa JSF, por padrão os campos de saída aplicam o escape nos caracteres recebidos. Mas pode ser manualmente desabilitado para algum campo que permita formações com HTML ou scripts:
Ficando vulnerável ao ataque de XSS.
Referências
[FOGIE, S.; GROSSMAN, J.; HANSEN, R.; PETKOV, P. D.; RAGER, A.] XSS Attacks: Cross site scripting exploits and defense. United States of America: Syngress, 2007.
Conteúdos relacionados
- Conhecendo e previnindo a vulnerabilidade SQL Injection
- Introdução a criptografia
- Criptografia simétrica utilizando chave privada
- Criptografia assimétrica utilizando um par de chaves pública/privada