Falha de Segurança no Timthumb

Na segunda feira, o blog MM do Mark Maunder colocou um artigo falando sobre uma vunerabilidade, em um script muito usado em sites/blogs que rodam com WordPress, o TimThumb, que tem como foco a criação de miniaturas (thumbnails) de imagens.

Como o meu blog tem como foco o WordPress ví a necessidade de alertar o problema e fazer uma explicação mais técnica do problema. Então se você tem um blog em WordPress é muito provável que o seu tema faça uso desse script, se você não é desenvolvedor, entre em contato com quem faz a manutenção do código do seu site e peça para ele acessar este artigo ou o artigo original para poder resolver esse problema de segurança.

O que aconteceu?

Segundo o MM, ele abriu o blog para fazer um post e o site mostrou um anúncio, tipo aqueles de viagra ou de que você foi o vencedor. Para verificar o que estava acontecendo ele abriu o Dev Tools do Chrome e procurou por quais conexões externas poderiam estar fazendo aquilo, e ele encontrou alguns Ads, e como ele não coloca anúncios no blog dele, algo deveria estar errado. Ele pegou o domínio do anúncio e fez um grep, para procurar a fonte do problema, e nada foi encontrado depois ele fez um dump do banco de dados e procurou denovo, nada outra vez.

O grande problema é o hacker que havia colocado o código malicioso no site dele usou uma função chamada eval(base64_decode('string')); e dessa forma você esconde o código real que será exibido em um encode de 64 bits, e na hora da execução o PHP executa o código com a função eval.

Este problema só aconteceu porque as permissões da pasta estavam dando permissão de escrita, mas isso não explica o porque e como este código foi parar no servidor dele.

Acessando alguns logs de erros, do apache e do nginx ele começou a entender qual era o problema.

Segundo o que foi reportado ele usa o tema Memoir da ElegantThemes.com, e como a maioria dos temas de WordPress ele faz uso do TimThumb para fazer o recorte das imagens, e ele carrega a imagem de uma url e para diminuir o uso do servidor faz cache em disco das imagens para tornar o script mais performático.

De uma forma geral, se você conseguir fazer com que o TimThumb carregue um arquivo .php você consegue fazer o que você quiser no servidor a pessoa.

Por padrão a maioria dos sites que usam o TimThumb vem com as permissões para domínios externos com os seguintes sites, para que possa ser possível recortar imagens externas.

$allowedSites = array (
     ‘flickr.com’,
     ‘picasa.com’,
     ‘blogger.com’,
     ‘wordpress.com’,
     ‘img.youtube.com’,
     ‘upload.wikimedia.org’,
     ‘photobucket.com’,
);

Bom nesta parte do código do TimThumb que mora o problema, pois o desenvolvedor usa o strpos para verificar o domíno, e dessa forma se em qualquer parte da URL tiver um destes domínios permitidos, o usuário consegue fazer fetch de um arquivo PHP para o seu servidor.

Por exemplo, http://flickr.com.hacker.com.br/gotcha.php, será um domínio válido para o TimThumb e ai o script irá pegar esse arquivo e colocar na pasta de Cache do seu TimThumb…

Assim como o MM, concordo que esta forma de fazer as coisas irá funcionar em 99% dos servidores que existem hoje, o TimThumb em nenhum momento vai executar esse script, mas se você acessar a url ele será executado.

No ataque foi colocado um arquivo .php com um código chamado Alucar, que se esconde, como dito acima com decode_base64, e mesmo se todo o resto do seu servidor for seguro o Alucar permite que você coloque arquivos no servidor e consiga senhas e usuários de administração.

A tela que o Alucar mostra para o usuário é essa, a não ser na primeira vez que ele pede um login e senha.

Alucar Shell PHP Script

Alucar Shell PHP Script

Solução

Bom é bem simples solucionar o problema com o TimThumb, você deve atualizar a sua versão do TimThumb para a última versão que está sendo destribuida no Grupo do Google do TimThumb.

Agora se você já foi infectado é um pouco mais complexo, nada impossível mas é mais chato. Abaixo segue uma listinha de passos para descobrir se foi infectado e abaixo o link para as duas versões do código do Alucar:

  1. Logue por SSH no seu servidor
  2. cd para a a raiz do WordPress
  3. Rode o comando, grep -r base64_decode *
  4. Você deve ver algumas ocorrências de arquivos com essa função e uma grande string como argumento

Como qualquer arquivo pode ter sido colocado em seu servidor, não só o Alucar, não tem como saber o que foi mudado. Mas descobrindo qual foi o arquivo que foi executado é possível fazer uma engenharia reversa e descobrir o que foi mudado, agora não é um processo que uma pessoa com conhecimentos básicos de PHP vai conseguir resolver, então recomendo que verifique se você tem algum arquivo PHP na pasta onde o seu TimThumb foi configurado para fazer Cache.

Qualquer dúvida ou problema, deixe nos comentários que eu tento ajudar.

, , , , ,

Comentários (2)

  1. Thiago

    on 03/08/2011 at 15:32 said:

    Post de utilidade pública, muito bom. Com certeza vai ajudar muita gente. Vlw.

  2. Pingback: Unlock Gamers “Hackeada” – Mas nada tão sério assim.

Deixar uma Resposta

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>