Conteúdo do curso
Segurança de Sistemas

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.

What is cross-site scripting (XSS) and how to prevent it? | Web Security  Academy

A7: Cross-Site Scripting (XSS) 💻 - Top 10 OWASP 2022

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.