O que é Cross-site scripting (XSS)?
Cross-site scripting (XSS) é uma forma de ataque de injeção de código em que um adversário insere código malicioso em um website legítimo. O código então é lançado como um script infectado no navegador da vítima, permitindo que o invasor roube informações confidenciais ou se passe pelo usuário.
Fóruns da Web, quadros de mensagens, blogs e outros websites que permitem que pessoas publiquem seus próprios conteúdos são os mais suscetíveis a ataques XSS. A menos que as entradas sejam revisadas, verificadas e codificadas pela aplicação da Web, qualquer script malicioso inserido no código será executado automaticamente pelos navegadores dos outros usuários. Esses scripts podem então acessar cookies de usuários, tokens de sessão ou outras informações sensíveis armazenadas pelo navegador e usadas no website. Em ataques mais avançados, esses scripts podem até reescrever o conteúdo da página da Web infectada.
O número de ataques sem arquivos e baseados em scripts, como o XSS, têm aumentado nos últimos anos devido à sua capacidade de evasão. Esses ataques contornam soluções antivírus (AV) e firewalls comuns com facilidade, o que os torna muito fáceis de executar. As organizações têm que incluir a detecção e prevenção de XSS como parte da estratégia geral de cibersegurança para proteger os visitantes de seus websites e reduzir o risco de causar danos à reputação da organização.
Como o cross-site scripting funciona?
É importante notar que a mecânica de um ataque XSS varia dependendo do tipo de ataque implementado. No entanto, a maioria dos ataques segue um mesmo processo:
- O invasor identifica um local e um método para injetar códigos maliciosos em uma página da Web. Para que isso seja possível, o website tem que permitir que usuários adicionem conteúdo na página por meio de comentários, publicações ou campos de contato. Se o invasor tiver um alvo específico, ele vai empregar táticas de engenharia social, como phishing e spoofing, para induzir o usuário a visitar o website em questão. Caso contrário, o código malicioso fica na página esperando ser acionado por qualquer usuário.
- A vítima acessa o website com o código injetado. O dispositivo dela aceita e executa o script infectado, porque o interpreta como parte do código fonte de um website confiável. Dado que o código malicioso não é visível e a maioria dos usuários da Internet não tem conhecimento de linguagens de programação comuns como o JavaScript, a detecção de ataques XSS é muito difícil para o usuário comum.
Tipos de ataques XSS com exemplos
Existem três tipos principais de ataques de cross-site scripting:
1. XSS refletido ou não persistente
O script malicioso é executado como parte de uma solicitação HTTP ativa e é "refletido" do servidor da Web de volta para o usuário.
Ataques XSS refletidos são a forma mais simples de cross-site scripting e acontecem quando uma aplicação da Web recebe dados de uma solicitação HTTP e os envia de volta na resposta, sem validação ou codificação.
O exemplo a seguir ilustra um ataque XSS refletido:
https://insecure-website.com/status?message=All+is+great.Status: All is great.
Como a aplicação não processa os dados de nenhuma forma, o invasor pode facilmente lançar um ataque com base em script como o demonstrado abaixo.
https://insecure-website.com/status?message=Status:
Em um ataque refletido, o script injetado se disfarça de mensagem de erro, resultado de pesquisa ou ação similar e é disseminado por links maliciosos. Quando os links são acessados, o script é executado, permitindo que o código injetado seja transferido para o website vulnerável e "refletido" de volta para o navegador do usuário. O navegador executa o código porque o considera parte de um website confiável. O script pode então tomar qualquer ação que o usuário possa realizar na sessão, além de capturar os dados transmitidos pelo usuário durante a sessão.
2. XSS armazenado ou persistente
O script malicioso é armazenado permanentemente no banco de dados da aplicação da Web, assim como em registros de visitantes, fóruns on-line ou campos de comentários.
Ataques XSS armazenados, também conhecidos como ataques XSS persistentes, acontecem quando uma aplicação da Web exibe dados de uma fonte não confiável ou não verificada nas respostas HTTP subsequentes. Em um ataque de cross-site scripting armazenado, o script injetado é permanentemente salvo nos servidores alvo, tal como em um banco de dados, publicação em fórum, comentário ou outro local. Por exemplo:
Olá, este é o meu comentário!
Se o website não processar os dados que forem enviados, um invasor poderá facilmente inserir conteúdo que inclua scripts maliciosos que infectarão outros usuários. A vítima recupera o script malicioso do servidor quando ele solicita as informações armazenadas.
3. XSS baseado em modelo de objeto de documento (DOM)
A vulnerabilidade de segurança reside no código do lado do cliente, que é executado no navegador, e não no código do lado do servidor.
O XSS baseado em DOM é um tipo de ataque incomum de cross-site scripting. Diferente dos outros dois tipos de ataque, que visam o código do lado do servidor, um ataque de XSS baseado em DOM explora vulnerabilidades de segurança no código do lado do cliente, ou seja, no código executado no navegador. Um ataque dessa natureza acontece quando uma aplicação da Web processa dados JavaScript de uma fonte não confiável sem a devida segurança. Ataques de XSS baseados em DOM sempre acontecem em JavaScript, porque ela é a única linguagem que todos os navegadores interpretam.
No exemplo a seguir, uma aplicação usa JavaScript para ler os valores de um campo de entrada. Em seguida, ela escreve os valores em um elemento do HTML.
var search = document.getElementById('search').value;var results = document.getElementById('results');
results.innerHTML = 'You searched for: ' + search;
Quando o valor do campo de entrada é controlado pelos invasores, eles podem facilmente inserir códigos maliciosos que acionam scripts.
Você pesquisou por: <img src="1"
Outros métodos de classificação de XSS
É importante notar que, embora cada um desses três tipos de ataque seja distinto, eles não são mutuamente exclusivos. Existe uma certa sobreposição entre as categorias, o que permite que os adversários usem elementos de dois tipos de ataque em uma só investida.
Por esse motivo, a comunidade de cibersegurança também classifica os ataques de XSS com base no local onde o código malicioso é explorado — no servidor ou no cliente. Esses ataques também são comumente chamados de XSS de servidor ou XSS de cliente.
Saiba mais
Veja como monitorar rapidamente as vulnerabilidades nos sistemas e aplicações da sua organização.
Assista: Uso do Falcon Spotlight para gerenciamento de vulnerabilidades
Diferentes abordagens de cross-site scripting
Um ataque XSS pode ocorrer em qualquer ponto onde a entrada de uma requisição HTTP possa ser inserida na saída HTML. Segue abaixo uma lista de táticas comuns que os atacantes podem usar em ataques de XSS:
- Usar uma tag de <script> para referenciar, inserir ou integrar códigos maliciosos de JavaScript.
- Explorar atributos de evento do JavaScript, tais como "onload" e "onerror", com tags diferentes.
- Entregar payloads de XSS na tag <body> através dos atributos de evento do JavaScript.
- Explorar tags <img>, <link>, <div>, <table>, <td> ou <object> desprotegidas para referenciar scripts maliciosos.
- Usar a tag <iframe> para integrar a uma página da Web na página existente.
Quais são os impactos dos ataques de XSS?
Eles podem causar problemas significativos para as vítimas. Em casos extremos, invasores de XSS podem usar os cookies de usuário para se disfarçarem das vítimas. O código também é capaz de roubar arquivos e dados, assim como instalar malware no dispositivo.
No lado do servidor, os ataques XSS podem causar danos à reputação da organização de host. Por exemplo, ao fazer mudanças no conteúdo de um website corporativo, os invasores podem disseminar informações falsas sobre as práticas ou atividades comerciais da empresa. Eles também podem manipular o conteúdo do website para fornecer instruções ou direcionamentos errados para os visitantes. Este tipo de comprometimento é muito perigoso quando hackers tomam o controle de websites ou recursos governamentais durante eventos de emergência, desinformando o público geral em relação a como e onde buscar ajuda em momentos de crise.
Infelizmente, vulnerabilidades de XSS podem ser difíceis de identificar, especialmente por usuários que não têm conhecimento de programação de computadores. Até mesmo desenvolvedores experientes raramente verificam códigos provenientes de websites confiáveis. Depois de injetado, pode ser extremamente difícil de remover o código malicioso da aplicação, especialmente em ataques de XSS armazenados.
Expert Tip
Neste vídeo, a CrowdStrike ilustra como o Falcon usa várias capacidades de detecção para impedir ataques baseados em script.
Prevenção contra XSS
É fundamental garantir que sua organização não esteja vulnerável a ataques de XSS. Ataques baseados em scripts e outros ataques sem arquivos têm se tornado mais comuns nos últimos anos, porque contornam a detecção por ferramentas de segurança novas e antigas, incluindo softwares antivírus e firewalls.
Para manter um website seguro, as equipes de Web das organizações têm que colaborar com as equipes de cibersegurança ou com um parceiro de cibersegurança confiável, para avaliar o risco de ataques de XSS nos websites corporativos.
Administrar um website seguro, tanto no lado do cliente quanto no lado do servidor, geralmente exige uma solução de gerenciamento de vulnerabilidades para monitoramento contínuo do website em busca de possíveis falhas de segurança. Uma excelente forma de realizar essa tarefa é definir um "líder de SecOps", ou seja, um membro da equipe de cibersegurança que vai trabalhar em conjunto com os desenvolvedores da Web e outros membros da equipe para implementar práticas recomendadas de segurança no desenvolvimento e na manutenção do website. A pessoa líder de segurança também pode fornecer insights sobre fraquezas ou vulnerabilidades críticas que podem expor o website a ataques de XSS.
Além disso, ao trabalhar com sua equipe de cibersegurança, considere estas práticas para criar um ambiente da Web seguro e protegido:
- Realizar testes de invasão manuais em áreas selecionadas com altas chances de exploração.
- Limitar a capacidade dos usuários de enviar conteúdo para o website da empresa e outros recursos, como fóruns, blogs ou grupos de membros.
- Ao permitir entradas de usuário, filtre todo o conteúdo na chegada com parâmetros rigorosos; codifique os dados na etapa de saída.
- Impedir que códigos maliciosos sejam injetados em respostas que não devem conter código HTML ou JavaScript.
- Fornecer treinamento contínuo de cibersegurança e oportunidades de desenvolvimento para as equipes de TI, assim como para desenvolvedores, programadores e engenheiros de computação, para garantir que todos estejam cientes dos riscos de XSS e possam lidar com eles adequadamente.
Saiba mais
Saiba mais sobre nosso gerenciamento de vulnerabilidades (VM) moderno e nativo em nuvem, com visibilidade instantânea e sobrecarga zero de scanner para preencher as lacunas de colaboração de segurança.