Gif Injection

Tags: , — June 20, 2007 @ 12:29 pm

Recebi um artigo nesta manhã, do PHP Classes, sobre uma falha de segurança em PHP usando imagens *.gif, onde um usuário poderia inserir códigos php malicioso na imagem.

Eu mesmo fiz alguns testes quanto a vulnerabilidade, que pode ser encontrada em websites que não verifiquem a extensão e conteúdo de um arquivo enviado por upload, verificando, no máximo, as dimensões da imagem.

A função getimagesize() retornará valores nulos caso usada em um arquivo que não seja uma imagem válida, assim, um website que verifique o tamanho de uma imagem antes de serví-la não aceitará normalmente scripts PHP em seus uploads… porém, caso o código PHP seja inserido ao final de uma imagem, a função getimagesize() ainda retornará as dimensões da imagem e o tipo mime corretamente.

Em meu teste utilizei uma imagem GIF de 15×15 brasil.gif. então eu renomeei o arquivo para brasil.gif.php e simplesmente inseri meu código php ao final do arquivo, utilizando um editor de texto simples, com o vi.

PHP Injection on GIF Image

Assim, ao servir a imagem simplesmente apontanto o browser para o arquivo ‘brasil.gif.php’ o código php será executado normalmente, e a função getimagesize() ainda retornará o tamanho da imagem corretamente (achei interessante o modo como o Thunar, gerenciador de arquivos do Xfce4, descreve o arquivo em questão: ‘”brasil.gif.php” (403 B) Script PHP, Tamanho da Imagem: 15×15′).

Esta não chega a ser uma flaha de segurança muito problemática, visto que não é difícil de resolver, para isto, basta seguir algumas precauções de segurança:

  • Renomeio os arquivos (verifique o tipo mime do arquivo, <? $size = getimagesize($filename); $mime = $size[’mime’]; ?> e renomeio com a extensão adequada);
  • Não sirva diretamente as imagens enviando a url da imagem ao browser, utilize funções como readfile() para isso (envie o tipo de cabecalho e utilize uma função php para exibir a imagem, como <? header (’Content-Type: image/gif’); readfile ($image_path); ?>

Com pequenos cuidados como estes você não precisará se preocupar…

Fontes: http://www.phpclasses.org/blog/post/67-PHP-security-exploit-with-GIF-images.html, http://ha.ckers.org/blog/20070604/passing-malicious-php-through-getimagesize/

Se você gostou deste artigo, inscreva-se em meu RSS feed!

Related posts

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment