Re: [Cascavel-pm] Como listar somente imagens de um diretório?

Breno G. de Oliveira breno em clavis.com.br
Quarta Setembro 7 15:51:27 PDT 2005


João Gabriel wrote:
> Entrando na discussão...
> quais seriam os possiveis riscos?
> 


JG, os riscos são relacionados a dados vindos de fora do seu programa
afetando elementos também de fora do seu programa. Por exemplo, supondo
o seguinte trecho de código:

-------------8<-------------
opendir(dir, ".");
@fotos = readdir(dir);
closedir(dir);

foreach(@fotos) {
    system "gimp $_\n" if /\.jpg/;
}
-------------8<-------------

Esse programa, aparentemente inofensivo, abre no "gimp" todos os
arquivos de um diretorio com a extensão ".jpg". Agora experimente
digitar o seguinte comando:

$ touch "bla.jpg;echo walla"

depois disso, ao ser executado, o script vai encontrar o arquivo
"bla.jpg;echo walla" e vai executar a chamada ao sistema com o seguinte
comando:

$ gimp bla.jpg;echo walla

Que por sua vez vai fazer o gimp tentar abrir o arquivo "bla.jpg" (que
nao existe) e depois disso vai executar o comando "echo walla", que vai
exibir "walla" no terminal.

Esse exemplo é ingênuo (trocar a expressão regular pra /\.jpg$/ já
acabaria com meu "ataque", mas será que esse tipo de descuido não
acontece por aí?), até pq não passei muito tempo pensando em um método
efetivo e escondido de ataque dentro de um programa real e nem acho que
coubesse ao escopo do email. Também é inofensivo (imagine se, ao invés
de "echo bla" tivesse "rm -rf /"), mas acho que deu pra perceber um
pouco das implicações de segurança que confiar em dados externos ao seu
programa podem causar. ;)

Repare que se eu ativo o modo "taint" (passando o parâmetro -T ou
rodando o .pl com uid/gid reais diferentes dos uid/gid efetivos), o perl
impede a execução do programa acima dizendo:

Insecure $ENV{PATH} while running with -T switch at teste.pl line 6.


Espero ter ajudado.

[]s

breno


Mais detalhes sobre a lista de discussão Cascavel-pm