BlogEngine.Net Hacking

by Hirashiki 14. May 2008 22:35

 Já faz um mês que foi publicado este post, porém encontrei muitos sites (inclusive o meu) com este problema. Aparentemente eu corrigi. Se meu site ficar fora do ar, é sinal de que minha solução não deu certo Cry.

A explicação do js.axd

 O problema na versão do BlogEngine.net 1.3.1.0 está na codificação do HttpHandler js.axd.

 Em vez de você chamar um javascript como normalmente acontece em uma página HTML:


<script type="text/javascript" src="codigo_javascript.js"></script>

 Através do js.axd você chama assim:


<script type="text/javascript" src="/js.axd?path=codigo_javascript.js">

 Internamente, este Handler lê o arquivo codigo_javascript.js e insere dinamicamente no HTML. Funciona tanto para arquivos JavaScript internos, como também para externos. como por exemplo:


<script type="text/javascript" src="/js.axd?path=http://www.algumsite.com/codigo_javascript.js">


A falha na segurança 

 Na versão 1.3.0 do BlogEngine.net, podemos utilizar o js.axd para ter acesso a qualquer arquivo no site. Um dos arquivos que você pode visualizar através desta falha é o users.xml. Ao digitar no browser http://algumsite.com/js.axd?path=/app_data/users.xml, você consegue visualizar o conteúdo do arquivo, e como o arquivo XML não está criptografado, você consegue acesso admin ao site.

 Em outro caso, pode-se ter acesso ao arquivo Web.Config onde contém, por exemplo, a senha de acesso ao banco de dados.

 Diante deste problema, a equipe do BlogEngine.net divulgou um patch de correção e uma versão full do Blog, chamada de BlogEngine.net versão 1.3.1.0.

 Mesmo com esta correção, achei um post do blog ha.ckers.org (http://ha.ckers.org/blog/20080412/blogenginenet-intranet-hacking/) que descreve 2 modos de se visualizar páginas de uma intranet onde existe o BlogEngine.net instalado.

 A primeira é usando o js.axd para chamar as páginas como localhost (http://algumsite.com/js.axd?path=http://localhost/).

 O segundo método é usando uma inserção de código JavaScript na página Search.aspx (search.aspx?q=%22%3E%3Cscript%3Ealert(%22XSS%22)%3C/script%3E).

 Nos comentários, foi comprovado que o patch não protege totalmente os arquivos onde está hospedado o BlogEngine.net. Você ainda consegue visualizar arquivos importantes, como o machine.config.

A "Solução" 

 Existem 2 lugares onde deve-se alterar o código e recompilar para corrigir o problema. O primeiro arquivo é o JavaScriptHandler.cs:


    private static string RetrieveLocalScript(string file)
    {
        if (!file.EndsWith(".js", StringComparison.OrdinalIgnoreCase))
        {
            throw new System.Security.SecurityException("No access");
        }
       ...

 O segundo lugar é no arquivo search.aspx. Localize o trecho:

Request.QueryString["q"]

 E substitua por:

Request.QueryString["q"].Replace("<", "").Replace(">", "")

Aparentemente, estas duas soluções bloqueiam os problemas descritos no site ha.ckers.org. Não é 100% de certeza que funcione, mas já dá pra proteger mais o seu site.

Você pode realizar o download do ZIP contendo os 2 arquivos necessários para solucionar o problema.

Correcao_BlogEngine_Hacking.zip (3,27 kb)

Tags: , , ,

BlogEngine.NET

Calendário

<<  September 2010  >>
MoTuWeThFrSaSu
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

View posts in large calendar

RecentPosts