Cross-site Scripting (XSS) é uma vulnerabilidade de segurança normalmente encontrada em sites e ou aplicações web que aceitam entrada do usuário. Exemplos disso incluem mecanismos de busca, formulários de login, fóruns de mensagens e caixas de comentários.
Índice
Cibercriminosos exploram essa vulnerabilidade inserindo cadeias de código malicioso executável nessas funções. Isso injeta o código malicioso no conteúdo do site-alvo, tornando-o parte do site e, assim, permitindo que afete vítimas que possam visitar ou visualizar esse site. O código também pode se apresentar como conteúdo transitório que não é realmente parte do site, mas apenas parece ser para o visitante. Isso faz parecer que o site foi de fato comprometido por cibercriminosos.
Cibercriminosos também podem usar essa vulnerabilidade para assumir controle ou comprometer diretamente um site, bem como explorar outras vulnerabilidades existentes no servidor ou software do site.
Cibercriminosos escolhem o site-alvo e mapeiam suas funções vulneráveis que aceitam entrada do usuário. Exemplos são barras de busca, formulários de login e caixas de comentários.
Eles inserem código malicioso na função escolhida. O código malicioso pode ser escrito usando linguagens de programação como HTML ou JavaScript, entre outras.
O código malicioso é injetado na página web resultante da função, como resultados de busca ou uma página de comentários. Ele então passa a fazer parte da página web, tornando-a comprometida.
Dependendo de como o código é injetado, o conteúdo malicioso pode nem estar na página web real, mas sim como um elemento transitório que aparece apenas como parte do site durante a instância específica da exploração. Isso pode criar a ilusão de que o site real está de fato comprometido, quando na verdade não está.
Usuários podem se tornar vítimas da página web comprometida ao serem induzidos a acessá-la pelos cibercriminosos responsáveis ou ao tropeçarem nela, dependendo de qual função os responsáveis decidiram abusar.
As rotinas que o código injetado pode executar no sistema da vítima podem variar do inofensivamente irritante ao totalmente malicioso. Pode ser tão inofensivo quanto uma imagem inesperada sendo exibida entre o conteúdo legitimamente publicado no site, ou algo que redirecione o usuário para um site malicioso ou faça o download automático de arquivos maliciosos no sistema da vítima. Também pode ser usado para roubar informações pessoais críticas da vítima, como informações de login.
Com o XSS, cibercriminosos podem transformar sites confiáveis em maliciosos, causando danos excessivos não apenas às vítimas, mas também à reputação do proprietário do site confiável.
Sites comprometidos por XSS podem causar uma série de ameaças ao sistema do usuário. Isso pode envolver desde conteúdo impróprio sendo exibido até malware sendo baixado para o sistema sem o conhecimento do usuário.
Assim como o XSS é perigoso, existem formas de corrigir essa vulnerabilidade. Proprietários de sites devem garantir que todas as aplicações web que aceitam entrada do usuário façam isso de forma que as cadeias inseridas sejam sanitizadas antes de gerar a página resultante da entrada. Isso evita que qualquer injeção de código ocorra. Usuários, por outro lado, devem desativar scripts em seus navegadores, bem como evitar clicar em links de partes ou remetentes suspeitos.
Desenvolvedores de sites devem
Garantir que qualquer página do site que aceite entrada do usuário filtre entradas de código, como HTML e JavaScript.
Verificar vulnerabilidades em aplicações web e corrigi-las adequadamente.
Atualizar o site e o software do servidor para evitar exploração futura de vulnerabilidades que também possam ser alvo por meio de um ataque XSS.
Usuários devem
Desabilitar scripts em páginas onde eles não são necessários ou desativá-los completamente.
Evitar clicar em links suspeitos ou postagens em fóruns de mensagens, pois isso pode levar a páginas comprometidas.
Acessar sites desejados diretamente pelo endereço, e não por meio de uma fonte ou link de terceiros.
Atualizar regularmente o software do sistema e as aplicações para evitar a exploração de vulnerabilidades secundárias.
De acordo com o Open Web Application Security Project (OWASP), ataques XSS se enquadram em uma de três categorias: XSS refletido, XSS armazenado e XSS baseado em Document Object Model (DOM). Eles são detalhados abaixo.
Ataque de cross-site scripting refletido (não persistente)
Um ataque XSS refletido ocorre quando um hacker entrega um script malicioso a uma aplicação web vulnerável, que o servidor então retorna na resposta HTTP. O navegador da vítima executa o script malicioso como parte da resposta HTTP, comprometendo o usuário legítimo e enviando informações privadas de volta ao hacker.
Ataques XSS refletidos normalmente têm como alvo mensagens de erro ou páginas de resultados de busca, pois é fácil enviar um e-mail malicioso com um link que muitos usuários clicarão. Quando o usuário clica no link, o servidor recebe a solicitação contendo o script malicioso e, como ele não é armazenado, responde enviando o código de volta ao usuário. Quando entradas do usuário não são devidamente validadas e sanitizadas, ou quando dados são duplicados de forma insegura a partir de uma solicitação, existe risco de vulnerabilidades XSS refletidas.
A primeira linha de defesa contra ataques XSS é filtrar conteúdo e verificar entradas do usuário. É possível usar salvaguardas e blocklists de scripts para rejeitar padrões de dados arriscados.
Além disso, é possível implementar uma Política de Segurança de Conteúdo (CSP) rigorosa para ajudar a identificar a origem de scripts inline, reduzindo o risco de ataques XSS refletidos. Uma CSP forte oferece controle sobre scripts e sobre os locais da página web de onde eles podem ser carregados e executados.
Ataque de cross-site scripting armazenado (persistente)
Em um ataque XSS armazenado, um script malicioso é salvo na entrada para o servidor-alvo. Diferentemente do XSS refletido, que é executado no servidor, um ataque XSS armazenado é executado no navegador do usuário. Atacantes então usam aplicações HTML modernas, normalmente empregando bancos de dados HTML, para armazenar permanentemente scripts nocivos no navegador.
Em um ataque XSS armazenado, o script é salvo e executado no servidor toda vez que o usuário acessa o site afetado. É fácil para um atacante atingir um grande número de vítimas, e o resultado é persistente. Ataques XSS armazenados também podem ocorrer quando usuários não confiáveis tentam extrair dados do software sem adotar quaisquer precauções de sanitização ou validação.
Ataques XSS armazenados buscam refletir um script malicioso para um usuário, portanto a maneira mais fácil de evitá-los é sanitizar dados do usuário e tratar entradas cuidadosamente — e a melhor forma de fazer isso é usando binding apropriado de parâmetros.
É possível sanitizar dados com um sistema de template de escape automático ou codificação HTML. Deve-se codificar dados destinados à saída para impedir que o servidor os interprete como conteúdo ativo. Isso significa que a aplicação tratará caracteres especiais em seus dados salvos como conteúdo de tag HTML, em vez de HTML simples.
O binding de parâmetros (data) reduz vetores de injeção, mas também pode passar variáveis como valores adicionais fora da funcionalidade normal da função. Também é possível usar cabeçalhos de resposta apropriados para evitar ataques, normalmente apenas adicionando algumas linhas de código.
Outra técnica para impedir ataques XSS em tempo real é empregar segurança dinâmica que busque ativamente tentativas de exploração. Ao bloquear padrões conhecidos, é possível impedir que atacantes explorem brechas existentes.
Por fim, é possível usar Web Application Firewalls (WAFs) para detecção e mitigação de ataques XSS em tempo real.
Ataque de cross-site scripting baseado em Document Object Model (DOM)
A interface DOM permite o processamento e a manipulação de conteúdos de páginas web por meio da leitura e modificação de documentos HTML e XML. Ataques XSS baseados em DOM introduzem alterações maliciosas no conteúdo DOM do navegador da vítima, fazendo com que o código do lado do cliente seja executado de forma não intencional.
Ataques XSS baseados em DOM, diferentemente dos ataques refletidos e armazenados, não armazenam o script malicioso nem o entregam ao servidor. Nesse ataque, a vulnerabilidade está apenas no navegador da vítima. Como eles são mais difíceis de entender do que outras categorias, vulnerabilidades baseadas em DOM são incomuns, sofisticadas e difíceis de mitigar. Além disso, scanners automatizados de vulnerabilidades e web application firewalls não conseguem identificá-los facilmente.
É possível usar as mesmas técnicas de prevenção do caso dos outros dois, mas é necessário ter cuidado extra para sanitizar o código do lado do cliente. Duas técnicas eficazes são evitar que fontes não controladas alterem funções JavaScript potencialmente perigosas (conhecidas como sinks) ou permitir apenas conteúdo confiável usando uma safelist. Com essas precauções, strings que poderiam colocar o DOM em risco não serão enviadas para sinks. Também é possível sanitizar os dados usando funcionalidades nativas do navegador, reduzindo o risco de problemas relacionados a alterações do parser.
Uma nova defesa contra esse tipo de ataque é o uso de tipos confiáveis (trusted types). Esse é um mecanismo de segurança do navegador que garante que todas as partes arriscadas do DOM só possam ser usadas por dados que tenham passado por uma política predefinida. Ele impede que strings arbitrárias sejam passadas para sinks potencialmente perigosos, ajudando o navegador a diferenciar entre código e dados — removendo a principal fonte de vulnerabilidade.
Ataques XSS são categorizados como XSS do servidor ou XSS do cliente. Ataques XSS do servidor ocorrem no servidor e lidam com a interface do usuário e qualquer outro processamento que acontece no dispositivo do cliente. Programas do lado do servidor operam em servidores e criam o conteúdo de uma página web.
XSS do lado do servidor ocorre quando todo o código do lado do servidor é vulnerável e o navegador renderiza a resposta e executa quaisquer scripts legítimos incorporados nela. Por outro lado, o XSS do lado do cliente é executado no dispositivo do usuário e modifica uma página web depois que ela foi carregada.
Um ataque XSS é possível sempre que houver HTML. Sejam armazenados, refletidos ou baseados em DOM, todos os ataques XSS têm o mesmo efeito: Um atacante obtém controle completo de uma sessão web.
Esses ataques XSS também podem se sobrepor, e um site pode ser vulnerável aos três simultaneamente. No caso de um único site ou aplicação off-line, todos os três tipos de ataque podem se manifestar diretamente no navegador. Porém, o comportamento pode diferir quando os dados são salvos no servidor em comparação com quando são refletidos pelo servidor.
Parar os adversários mais rapidamente e assumir o controle de seus riscos cibernéticos começa com uma única plataforma. Gerencie a segurança de forma holística com recursos abrangentes de prevenção, detecção e resposta com tecnologia de IA, pesquisa e inteligência de ameaças líderes.
O Trend Vision One suporta diversos ambientes de TI híbridos, automatiza e orquestra fluxos de trabalho e oferece serviços especializados de segurança cibernética, para que você possa simplificar e convergir sua segurança.
Jon Clay trabalhou no espaço de Cibersegurança por mais de 29 anos. Jon usa sua experiência no setor para educar e compartilhar insights sobre todas as pesquisas e inteligências de ameaças publicadas externamente pela Trend Micro.