Suas aplicações são seguras?

Conheça a Conviso!

Cross-Site Scripting usando CSS

Quando estamos executando um projeto de revisão de código, sempre que encontramos algum trecho de código suspeito, investimos um certo tempo para ter a certeza que aquele ponto é ou não uma vulnerabilidade.

Em um destes projetos, nos deparamos com um trecho de código similar ao abaixo:

Arquivo: arquivo_teste.php

1 <html>
 2   <head>
 3     <style>
 4          <?php echo strip_tags($_GET['style']); ?>
 5     </style>
 6   </head>
 7   <body>
 8   </body>
 9 </html>

Neste caso, a chamada a função strip_tags() não será suficiente para evitar que ataques de Cross-Site Scripting sejam realizados com sucesso. Através de códigos CSS, que não precisam das tags que são removidas pela função strip_tags(), é possível inserir códigos Javascript que serão interpretados por alguns browsers. É o caso do método expression()[1] para o Internet Explorer (IE) e a propriedade CSS -moz-binding para o Gecko, utilizado pelo Firefox. Aqui iremos falar apenas sobre o caso do IE. O método ‘expression()‘ funciona por padrão no IE versão 5 até 7 e 8 ou superior em modo compatibilidade [2].

Com base nisso, utilizei o seguinte payload para chamar o método alert() e imprimir a mensagem ‘CODIGO_MALICIOSO_EXECUTADO’ no IE versão 10 executado em modo de compatibilidade.


body{
left:expression(alert(String.fromCharCode(0×43,0×4f,0×44,0×49,0×47,0×4f,0×5f,0×4d,0×41,0×4c,0×49,0×43,0×49,0×4f,0×53,
0×4f,0×5f,0×45,0×58,0×45,0×43,0×55,0×54,0×41,0×44,0×4f)));
}

 

Foi necessário usar o método ‘.fromCharCode’ do objeto ‘String’ porque no ambiente de teste, a opção magic_quotes do PHP estava habilitada, evitando a inserção do carácter aspas-simples.

Em [3] também há outros exemplos, inclusive a utilização do -moz-binding para execução de códigos Javascript.

[1] – http://msdn.microsoft.com/en-us/library/ms537634.aspx
[2] – http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx
[3] – https://code.google.com/p/google-caja/wiki/CssAllowsArbitraryCodeExecution

 
 
Originalmente postado no Blog da Conviso Application Security – Siga-nos no Twitter @conviso Google+

Tags

Deixe um comentário

topo
%d blogueiros gostam disto: