Teste de script entre sites

Cross-site Scripting (XSS) ocorre sempre que um aplicativo pega dados não confiáveis ​​e os envia ao cliente (navegador) sem validação. Isso permite que os invasores executem scripts mal-intencionados no navegador da vítima, o que pode resultar no sequestro de sessões do usuário, desfigurando sites ou redirecionando o usuário para sites mal-intencionados.

Vamos entender os Agentes de Ameaça, Vetores de Ataque, Fraqueza de Segurança, Impacto Técnico e Impactos de Negócios dessa falha com a ajuda de um diagrama simples.

Tipos de XSS

  • Stored XSS - O XSS armazenado, também conhecido como XSS persistente, ocorre quando a entrada do usuário é armazenada no servidor de destino, como banco de dados / fórum de mensagem / campo de comentário, etc. Então, a vítima é capaz de recuperar os dados armazenados do aplicativo da web.

  • Reflected XSS - O XSS refletido, também conhecido como XSS não persistente, ocorre quando a entrada do usuário é imediatamente retornada por um aplicativo da web em uma mensagem de erro / resultado da pesquisa ou a entrada fornecida pelo usuário como parte da solicitação e sem armazenar permanentemente os dados fornecidos pelo usuário.

  • DOM Based XSS - O XSS baseado em DOM é uma forma de XSS quando a origem dos dados está no DOM, o coletor também está no DOM e o fluxo de dados nunca sai do navegador.

Exemplo

O aplicativo usa dados não confiáveis ​​na construção sem validação. Os caracteres especiais devem ser escapados.

http://www.webpage.org/task/Rule1?query=try

O invasor modifica o parâmetro de consulta em seu navegador para -

http://www.webpage.org/task/Rule1?query=<h3>Hello from XSS"</h3>

Mãos em

Step 1- Faça login no Webgoat e navegue até a seção de cross-site scripting (XSS). Vamos executar um ataque Stored Cross-site Scripting (XSS). Abaixo está o instantâneo do cenário.

Step 2- Conforme o cenário, vamos fazer o login como Tom com a senha 'tom' conforme mencionado no próprio cenário. Clique em 'ver perfil' e entre no modo de edição. Como tom é o invasor, vamos injetar script Java nessas caixas de edição.

<script> 
   alert("HACKED")
</script>

Step 3 - Assim que a atualização terminar, tom recebe uma caixa de alerta com a mensagem "hackeado", o que significa que o aplicativo está vulnerável.

Step 4 - Agora, de acordo com o cenário, precisamos fazer o login como jerry (HR) e verificar se jerry foi afetado pelo script injetado.

Step 5 - Depois de fazer login como Jerry, selecione 'Tom' e clique em 'ver perfil' conforme mostrado abaixo.

Enquanto visualiza o perfil de tom da conta de Jerry, ele consegue obter a mesma caixa de mensagem.

Step 6 - Esta caixa de mensagem é apenas um exemplo, mas o invasor real pode realizar muito mais do que apenas exibir uma caixa de mensagem.

Mecanismos Preventivos

  • Os desenvolvedores devem garantir o escape de todos os dados não confiáveis ​​com base no contexto HTML, como corpo, atributo, JavaScript, CSS ou URL em que os dados são colocados.

  • Para os aplicativos que precisam de caracteres especiais como entrada, deve haver mecanismos de validação robustos antes de aceitá-los como entradas válidas.