Todos os posts tagados videos

DOM XSS – Parte 1

dom_xss

Nesta primeira parte, num total de três, vou explicar o funcionamento do DOM XSS e demonstrar como encontrar falhas nesta variante do XSS – um tipo de ataque muito utilizado/comum hoje em dia para roubo de sessões, phishing e propagação de malware utilizando o XSS Persistente [mais perigoso que o XSS Refletido, pois o XSS Persistente fica armazenado na aplicação web].

Vou também fornecer referências e vídeos que ajudam a complementar este artigo.

Tive conhecimento do DOM XSS[1] há alguns anos, altura em que li o livro XSS Attacks: Cross Site Scripting Exploits and Defense de Seth Fogie[2], com a participação do Robert ‘RSnake’ Hansen[3]. Foi exatamente no site – ha.ckers.org – do RSnake que despertei o interesse pelo XSS.

O DOM XSS tem sido bastante popular na segurança informática, muito devido às recompensas nos programas de divulgação responsável de vulnerabilidades de diversas empresas [Google, Yahoo!, PayPal, etc]. Quem sabe se, com esta leitura, poderá ser uma oportunidade para o leitor ganhar uns trocados :-)
Essa popularidade também é originada pelo aumento da utilização de JavaScript [e por sua vez, AJAX] nas aplicações web [sites]. Ataques XSS baseados no DOM ainda são muito comuns encontrar nas aplicações web, muito por causa da complexidade de analisar códigos JavaScript [situação agravada quando o código está comprimido ou ofuscado].

Mas afinal o que é o DOM XSS?
DOM XSS é um ataque XSS[5] onde a ação nociva é executada como resultado de uma modificação no DOM [Document Object Model] do browser da vítima, presente num script do lado do cliente. Isto significa que, a resposta HTTP não é modificada mas o código do lado do cliente é executado de uma forma “diferente” [ou maliciosa] do habitual.
Ao contrário de outros ataques XSS, o DOM XSS opera do lado do cliente [client-side] e não no lado do servidor [server-side].
Por outras palavras, geralmente, uma aplicação web contém códigos em JavaScript que gerem o input do utilizador no HTML. Estes códigos controlam a aplicação web através do DOM. Uma injeção de código arbitrário no DOM é intitulado de DOM XSS.

Dependendo do tipo de vulnerabilidade, um utilizador malicioso pode utilizar ataques DOM XSS para roubo de dados de autenticação, phishing e até mesmo para propagar malware. Como os ataques DOM XSS são executados no browser da vítima, monitorizar este tipo de atividade pode ser uma tarefa difícil. Digo isto porque em determinados casos, o vector de ataque DOM XSS não passa sequer pelo servidor. Se a ação nociva estiver inserida num identificador hash (após o caracter #), os browsers não enviam essa parte do URL para os servidores.
Esta situação não ocorre apenas nos identificadores hash mas também em algumas novas funcionalidades HTML5, como o LocalStorage e o IndexedDB.
Tome como exemplo o seguinte código JavaScript numa página index.html:

var foobar = location.hash;
document.write(foobar);

domxss_1

Se aceder ao endereço com o browser Mozilla Firefox [Google Chrome bloqueia algumas tentativas de XSS – mas não todas :-)]:

http://site-que-nao-existe.pt/index.html

Não vai surgir nada no ecrã. No entanto se colocar:

http://site-que-nao-existe.pt/index.html#1234

Irá surgir no ecrã #1234 [valor da propriedade hash do objeto location].
Dado que não existe qualquer tipo de validação do input do utilizador, é possível injetar código HTML.
Testamos então injetar no location.hash o seguinte:

#1234<img src=x onerror=prompt(1);>

domxss_2

Acabou de explorar uma falha DOM XSS.
Convém referir que nem todas as falhas DOM XSS são fáceis de detetar. Na maioria dos casos, é necessário ter um conhecimento mais avançado da linguagem Javascript.

Mas existem formas mais automáticas para analisar este tipo de falha.
Poderá programar a sua própria ferramenta, utilizando as expressões regulares disponibilizadas pelo DOM XSS Wiki[4]:

Detetar fontes [é a origem do conteúdo, ou seja, donde vem a informação – por exemplo: document.URL]:

/(location\s*[\[.])|([.\[]\s*["']?\s*(arguments|dialogArguments|innerHTML|write(ln)?|open(Dialog)?|showModalDialog|cookie|URL|documentURI|baseURI|referrer|name|opener|parent|top|
content|self|frames)\W)|(localStorage|sessionStorage|Database)/

Detetar sinks [funções de JavaScript que poderão permitir executar strings como JavaScript]:

/((src|href|data|location|code|value|action)\s*["'\]]*\s*\+?\s*=)|((replace|assign|navigate|getResponseHeader|open(Dialog)?|showModalDialog|eval|evaluate|execCommand|execScript|setTimeout|setInterval)\s*["'\]]*\s*\()/

Caso contrário, já existem muitas ferramentas que auxiliam na pesquisa por DOM XSS:

No artigo DOM XSS – Parte 3 irei focar-me numa destas ferramentas, com exemplos práticos e dicas de utilização.

Como um vídeo vale mais do 1,8 milhões palavras, penso que é importante salientar estas duas apresentações em vídeo porque demonstram muito bem, pela voz de dois grandes especialistas, o que é o DOM XSS.

In the DOM – No one will hear you scream By Mario Heiderich

Sapo CodeBits V – Stefano di Paola

Como corrigir?
São imensos os casos que podem ocorrer para corrigir falhas DOM XSS. Passa sempre por filtrar [um bom lema para os programadores web – encode and sanitize] todos os parâmetros possíveis de modificação por parte de um utilizador.
A OWASP[6] tem uma página[7] dedicada exclusivamente à prevenção de falhas DOM XSS. Essa página explora vários tipos de cenários e contribui bastante para uma boa regra de etiqueta na programação de aplicações web.

Na segunda parte deste artigo, irei fornecer 3 exemplos de casos reais que irão ajudar o leitor a entender melhor esta matéria.

Até lá!

Referências:
[1] https://www.owasp.org/index.php/DOM_Based_XSS
[2] http://www.amazon.com/XSS-Attacks-Scripting-Exploits-Defense/dp/1597491543
[3] http://www.websegura.net/entrevista-com-robert-hansen/
[4] https://code.google.com/p/domxsswiki/
[5] https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29
[6] http://www.owasp.org
[7] https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

Você foi marcado em nossos videos!

Você foi marcado em nossos videos!

Uma nova campanha de SPAM está a utilizar o Youtube para propagar malware.
O email, escrito em português, informa que o email do utilizador foi identificado num vídeo do Youtube.

Corpo do email:

Temos a satisfação de comunica-lo que seu email (xxxxxxxx@xxxxxxx.pt) foi marcado em um
dos videos mais acessados de nossa rede.

Um link presente no corpo do email, encaminha para uma página web comprometido que aloja conteudo malicioso, mais propriamente um ficheiro www_youtube_com.jar (detetado por maioria dos antívirus atualizados) que posteriormente descarrega um ficheiro executável – BeTray.exe (VirusTotalMalwr) que torna o sistema operativo da vítima (apenas Microsoft Windows) vítima de C&C (Command and Control).

Clicou no link que acompanha este email?

Deve instalar ou correr um antivirus atualizado para remover qualquer conteúdo malicioso instalado.

Se por acaso necessitar de ajuda, comente este artigo ou contate-me.