O que é XSS?

A vulnerabilidade XSS (Cross-site Scripting) funciona manipulando um site vulnerável para que ele retorne script maliciosos aos usuários. Frequentemente, isso envolve JavaScript, mas qualquer linguagem do lado do cliente pode ser usada.


Impactos do XSS

  • Redirecionar usuários para um site malicioso (OpenRedirect)
  • Capturar as teclas digitadas pelos usuários (Keylogger)
  • Executar exploits baseados em navegador da Web
  • Obter informações do cookies de um usuário que está logado em um site
  • Roubar o token de sessão de login, permitindo que o invasor interaja com o aplicativo como a vítima sem saber sua senha
  • Forçar o usuário a enviar solicitações controlas pelo invasor a um servidor
  • Mudar o conteúdo da página (HTML Injection)

Tipos de ataques de XSS

XSS Persistente

XSS armazenado, também conhecido como XSS persistente, é considerado o tipo de ataque XSS mais prejudicial. O XSS persistente ocorre quando a entrada fornecida pelo usuário é armazenada e, em seguida, processada em uma página da Web. Os pontos de entrada típicos para XSS Armazenado incluem fóruns de mensagens, comentários em blogs, perfis de usuário e campos de nome de usuário. Um invasor normalmente explora essa vulnerabilidade injetando cargas de XSS em páginas populares de um site ou passando um link para um vítima, induzindo-a a visualizar a página que contém a carga de XSS Armazenada. A vítima visita a página e a carga útil é executada no lado do cliente pelo navegador da vítima.

XSS Não persistente / XSS Refletido/ XSS Refleted

O tipo mais comum de XSS é conhecido como XSS Refletido (também conhecido como XSS Não persistente). Nesse caso, a carga útil do invasor deve fazer parte da solicitação enviada ao servidor da Web. Em seguida, é refletido de volta de maneira que a resposta HTTP inclua a carga útil da solicitação HTTP. Os invasores usam links maliciosos, e-mails de phishing e outras técnicas de engenharia social para induzir a vítima a fazer uma solicitação ao servidor. A carga útil XSS refletida é então executada no navegador do usuário.

O XSS Refletido não é um ataque persistente, portanto, o invasor precisa entregar a carga útil a cada vítima. Esses ataques costumam ser feitos por meio de redes sociais.

XSS DOM-Based

XSS baseado em DOM refere-se a uma vulnerabilidade de cross-site scripting que aparece no DOM (Document Object Model) em vez de parte do HTML. Em ataques de cross-site scripting refletido e armazenados, você pode ver a carga útil da vulnerabilidade na página de resposta, mas no cross-site scripting baseado em DOM, o código-fonte HTML do ataque e a resposta serão os mesmos, ou seja, a carga útil não pode ser encontrada na resposta. Ele só pode ser observado em tempo de execução ou investigando o DOM da página.

Um ataque XSS baseado em DOM é geralmente um ataque do lado do cliente, e a carga maliciosa nunca é enviada ao servidor. Isso torna ainda mais difícil a deteccção de WAFs (Web Application Firewalls) e engenheiros de segurança que analisam os logs do servidor porque nunca veem o ataque. Os objetos DOM que são manipulados com mais frequência incluem o URL, a parte âncora do URL e o Referrer.


Defesas

Um dos métodos de defesa contra ataques de Cross-site Scripting é a aplicação de headers de Content Security Policy.