Articles

DOM base de Cross Site Scripting

Posted on

O menos conhecido de XSS Técnica

  • DOM está para o Modelo de Objeto de Documento
  • XSS significa cross-site scripting
  • a principal diferença entre O DOM de base de XSS e outras vulnerabilidades de XSS é que a carga é incorporado no lado do cliente em vez de no lado do servidor
  • DOM base de vulnerabilidades de XSS, portanto, ser impedida no lado do cliente

Cross-site scripting (XSS) vulnerabilidades de primeira tornou-se conhecido através do CERT Advisory CA-2000-02 (Tags HTML maliciosos incorporados em solicitações web do cliente), embora essas vulnerabilidades já tinham sido exploradas antes. Então o XSS já existe há algum tempo. E como seria de esperar, já houve uma série de artigos de laboratórios sobre o assunto, incluindo Cross Site Scripting – o perigo subestimado e Cross-Site-Scripting e prevenção de injeção de Script – Um Breve Guia. No entanto, este artigo centra-se em grande parte no DOM based cross-site scripting, um termo cunhado pela primeira vez em 2005 por Amit Klein. Ele divulgou a definição de cross-site scripting (XSS) baseado em DOM e delineou-a a partir de outras vulnerabilidades de cross-site scripting. Para entender o dom baseado em scripting cross-site, você primeiro precisa de uma compreensão mais profunda do DOM.O que é o DOM?

o modelo objecto do documento é uma interface de programa que define a estrutura dos documentos. O que é relevante para nossos propósitos é que DOM fornece a representação orientada a objetos de documentos HTML, especificamente:

  • Como um elemento HTML é representado como um objeto
  • Quais os atributos de um elemento HTML são
  • quais os métodos Que podem ser usados para acessar um elemento HTML
  • o Que os eventos de um elemento HTML são

Isto significa que o DOM especifica como os elementos do HTML pode ser encontrado, adicionado, alterado ou excluído no navegador. Isso significa que DOM oferece uma oportunidade para manipular páginas HTML. Atualmente, JavaScript é geralmente usado para este tipo de manipulação.

deve-se notar que cada navegador implementa o padrão DOM de forma diferente. Isso pode afetar se um ataque específico DOM XSS funciona em um navegador em particular.

o que é um XSS baseado no DOM?

uma vulnerabilidade XSS baseada no DOM surge quando o DOM é usado para gerar conteúdo dinâmico contendo entrada do usuário que pode ser processado sem verificação. Este tipo de ataque é realizado com JavaScript no navegador do Usuário. Aqui os locais que a entrada de usuário (maliciosa) traz para o DOM são designados como fonte. Os locais em que a entrada de usuário (maliciosa) pode ser executada no DOM são designados como sink.

um exemplo simples de uma vulnerabilidade de scripts entre sites:

<!DOCTYPE html><html> <body> <script> var source = "Hello " + decodeURIComponent(location.hash.split("#")); //Source var divElement = document.createElement("div"); divElement.innerHTML = source; //Sink document.body.appendChild(divElement); </script> </body></html>

A vulnerabilidade pode, por exemplo, ser acionado com o seguinte pedido GET:

GET www.vulnerable-website.example#<img src="test" onerror="alert('XSS')">

podemos ver que este exemplo usando o decodeURIComponent método. Isso ocorre porque os navegadores modernos codificam caracteres especiais na URL e o ataque não funcionaria sem que esses caracteres especiais fossem descodificados. O conteúdo da variável source é adicionado ao elemento div utilizando innerHTML. Este é o elemento problemático no código, porque sua atribuição a innerHTML faz com que o valor incluído com ele seja interpretado como HTML. Se o valor contém JavaScript, este também é executado.

deve salientar-se que isto não altera a resposta do servidor. A modificação maliciosa só surge quando o código JavaScript é executado no lado do cliente, que o DOM posteriormente altera.

as fontes e sumidouros mais conhecidos estão listados abaixo. Note-se que esta não é, de modo algum, uma lista exaustiva.

fontes

  • documento.URL
  • document.referrer
  • localização
  • localização.href
  • localização.procurar
  • localização.hash
  • localização.pathname

Pias

  • eval
  • setTimeout
  • setInterval
  • documento.escreva
  • elemento.innerHTML

prevenir XSS baseados em DOM

porque há casos em que a carga útil nunca realmente chega ao servidor, prevenir esta vulnerabilidade não é uma tarefa para o lado do servidor. O exemplo acima é um desses casos. A razão é que o conteúdo que aparece após um # character não é enviado pelo navegador para o servidor.

a primeira e mais importante recomendação é evitar o uso de dados controlados pelo Usuário para a geração dinâmica de conteúdo sempre que possível. Se isso for completamente inevitável, a melhor maneira de prevenir XSS baseados no DOM é usar métodos de saída seguros (sink) que impedem a execução de qualquer código maliciosamente embutido. No excerto de código acima, a única maneira de tornar o código seguro é substituir .innerHTML por .textContent. Isto é porque – ao contrário de innerHtml – elementos HTML no método textContent não são executados.

a cábula DOM based XSS Prevention da OWASP tem muitas dicas úteis para desenvolver sites dinâmicos seguros com JavaScript. Lá você também encontrará descrições da codificação dependente do contexto, que é necessária sempre que é impossível mudar para um método seguro de saída.

diferenças de outras vulnerabilidades XSS

a diferença mais importante é onde o ataque está incorporado no código. Em contraste com outras vulnerabilidades de scripts cross-site, o código não está incorporado no lado do servidor, mas sim no lado do cliente. Isto significa que a carga útil não pode ser encontrada no código de resposta. Vulnerabilidades XSS baseadas no DOM podem, portanto, ser detectadas apenas em tempo de execução ou verificando o DOM do site.

na maioria dos casos, encontrar vulnerabilidades XSS baseadas no DOM não é fácil. Uma abordagem útil que usa a abordagem de análise de código estático é descrita no artigo Burp-based-xss.

Sobre o Autor

Andrea Hauser

Andrea Hauser formou-se Bacharel em Ciência da FHO em tecnologia da informação na Universidade de Ciências Aplicadas de Rapperswil. Ela está focando seu trabalho ofensivo em testes de segurança de aplicações web e na realização de campanhas de engenharia social. Seu foco de pesquisa é criar e analisar peixes profundos. (ORCID 0000-0002-5161-8658)

Links

  • http://www.webappsec.org/projects/articles/071105.html
  • https://support.portswigger.net/customer/portal/articles/2325926-using-burp-scanner-to-test-for-dom
  • https://www.cert.org/historical/advisories/CA-2000-02.cfm
  • https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet
  • https://www.w3.org/DOM/

Deixe uma resposta

O seu endereço de email não será publicado.