sexta-feira, novembro 30, 2007

XSS - Cross Site Scripting

Já por várias vezes mencionei neste blog o termo XSS como uma técnica utilizada para conseguir atingir alguns objectivos menos correctos perante um site/forum/etc, mas nunca expliquei realmente em que consiste.

O que é o XSS?

O XSS (cross site scripting) é uma técnica que permite enviar snippets de código através de endereços URL, fóruns, qualquer serviço web com elevada interactividade.
Ultimamente esta técnica tornou-se um dos grandes problemas nos sites pelo motivo de que se encontra a ser cada vez mais utilizada, quer para roubar contas por session hijacking (mais comum) quer para outras situações que irei contemplar mais à frente.
Com um simples comando javascript bem colocado é possível redireccionar um utilizador directamente para uma página (p.e www.google.com)

location.href="http://www.google.com"


Claro que na realidade ninguém usa esta técnica para redireccionar para sites como o google. Aqui o truque é redireccionar para uma página de conteúdo malicioso que irá tentar roubar as cookies do utilizador para ganhar acesso às suas contas, por exemplo.

E como isto é feito?

O XSS é uma técnica relativamente fácil de aplicar, a dificuldade está na creatividade da utilização das instruções javascript para conseguir efectuar acções "produtivas".

Vou dar um exemplo de XSS básico com um serviço de guestbook conhecido: Html Gear. Este serviço tem neste momento uma falha no campo "Homepage" do post de comentário, onde não filtra o conteúdo lá colocado pelo utilizador. Sendo devido a isso possível inserir o seguinte código ao fazer um post no guestbook no campo "Homepage":

www.minhahomepage.com" OnMouseOver="alert('owned!')


No campo "Homepage", o que o utilizador colocar lá será colocado dentro de uma tag deste estilo:

<a href="o_url_da_homepage">homepage</a>


Se colocarmos o URL seguido de um fechar de aspas, tudo o que for colocado a seguir poderá ser interpretado como javascript, proporcionando a injecção do código que mostrei em cima.
Assim que for preenchido o resto do formulário e o post for submetido, sempre que o rato passar por cima do link irá aparecer uma alert box com a mensagem definida. Sabendo um pouco mais de javascript já dá para imaginar os estragos que se podem causar com esta pequena falha de validação do campo.

Na criação deste artigo não foi submetida nenhuma alteração em nenhum guestbook do serviço referido. E nunca é demais reforçar a ideia de que este artigo foi escrito com propósitos educacionais.

Para mais informações sobre o assunto:
- http://en.wikipedia.org/wiki/Cross_site_scripting
- http://sandsprite.com/Sleuth/papers/RealWorld_XSS_2.html