Cross-site scripting
Nesta seção, explicaremos o que é cross-site scripting, descreveremos os diferentes tipos de vulnerabilidades de cross-site scripting e detalharemos como encontrar e prevenir ataques desse tipo.
O que é cross-site scripting (XSS)?
Cross-site scripting (também conhecido como XSS) é uma vulnerabilidade de segurança web que permite a um atacante comprometer as interações dos usuários com uma aplicação vulnerável. Permite que o atacante burle a política de mesma origem, que visa segregar diferentes websites uns dos outros. Vulnerabilidades de cross-site scripting normalmente permitem que um atacante se faça passar por um usuário vítima, execute quaisquer ações que o usuário seja capaz de realizar e acesse todos os dados do usuário. Se o usuário vítima tiver acesso privilegiado à aplicação, o atacante poderá obter controle total sobre todas as funcionalidades e dados da aplicação.
Como funciona o XSS?
O ataque Cross-Site Scripting (XSS) funciona manipulando um site vulnerável para que ele retorne JavaScript malicioso aos usuários. Quando o código malicioso é executado no navegador da vítima, o atacante pode comprometer totalmente a interação dela com o aplicativo.
%2520example.png)
Laboratórios
Se você já está familiarizado com os conceitos básicos por trás das vulnerabilidades XSS e apenas deseja praticar a exploração delas em alvos realistas e deliberadamente vulneráveis, você pode acessar todos os laboratórios deste tópico através do link abaixo.
Prova de conceito de XSS
É possível confirmar a maioria dos tipos de vulnerabilidade XSS injetando um payload que faça com que seu próprio navegador execute algum JavaScript arbitrário. Há muito tempo é prática comum usar a alert()função para esse propósito, pois ela é curta, inofensiva e bastante difícil de passar despercebida quando chamada com sucesso. De fato, você resolve a maioria dos nossos laboratórios de XSS invocando-a alert()no navegador de uma vítima simulada.
Infelizmente, há um pequeno problema se você usa o Chrome. A partir da versão 92 (20 de julho de 2021), iframes de origem cruzada não podem mais chamar ` alert(). Como esses iframes são usados para construir alguns dos ataques XSS mais avançados, às vezes você precisará usar um payload de prova de conceito (PoC) alternativo. Nesse cenário, recomendamos a print()função `. Se você estiver interessado em saber mais sobre essa mudança e por que gostamos de ` print(), confira nossa postagem no blog sobre o assunto.
Como a vítima simulada em nossos laboratórios usa o Chrome, alteramos os laboratórios afetados para que também possam ser resolvidos usando o Chrome print(). Indicamos isso nas instruções sempre que relevante.
Quais são os tipos de ataques XSS?
Existem três tipos principais de ataques XSS. São eles:
- XSS refletido , onde o script malicioso provém da requisição HTTP atual.
- XSS armazenado , onde o script malicioso vem do banco de dados do site.
- XSS baseado em DOM , onde a vulnerabilidade existe no código do lado do cliente e não no código do lado do servidor.
Scripting entre sites refletido
O XSS refletido é a forma mais simples de cross-site scripting. Ele ocorre quando um aplicativo recebe dados em uma requisição HTTP e os inclui na resposta imediata de maneira insegura.
Aqui está um exemplo simples de uma vulnerabilidade XSS refletida:
https://insecure-website.com/status?message=All+is+well.
<p>Status: All is well.</p>
O aplicativo não realiza nenhum outro processamento dos dados, portanto, um invasor pode facilmente construir um ataque como este:
https://insecure-website.com/status?message=<script>/*+Bad+stuff+here...+*/</script>
<p>Status: <script>/* Bad stuff here... */</script></p>
Se o usuário visitar a URL construída pelo atacante, o script do atacante será executado no navegador do usuário, no contexto da sessão desse usuário com o aplicativo. Nesse ponto, o script poderá realizar qualquer ação e recuperar quaisquer dados aos quais o usuário tenha acesso.