[Cascavel-pm] perl Insecure dependency in kill

Nelson Ferraz nferraz em gmail.com
Terça Abril 13 09:03:04 PDT 2010


2010/4/13 Leonardo Reginin <leonardo em procergs.rs.gov.br>:
> O meu caso é justamente o problema com setuid e setgid. O programas que
> estão apresentando mensagem de erro semelhante, assim como o MRTG ( que
> executo como serviço no BSD ), são serviços que fazem fork executando o
> processo filho com outro usuário.

Só para ser um pouco mais completo na resposta, eu procurei na web
pelo código do MRTG e encontrei o seguinte trecho:

           if (defined $pidfile && open(READPID, "<$pidfile")){
               if (not eof READPID) {
                   chomp(my $input = <READPID>);    # read process id in pidfile
                   if ($input && kill 0 => $input) {# oops - the pid
actually exists
                        die "ERROR: I Quit! Another copy of mrtg seems
to be running. Check $pidfile\n";
                   }
               }
               close READPID;
           }

O mod_perl está reclamando que o valor de $input está sendo passado do
arquivo para o comando kill, sem qualquer tipo de validacão.

> Eu até achei um workaround usando a switch -U na chamada do perl porém isto
> é POG e não me agrada.

Se você quiser corrigir o problema, deve validar o $input e enviar um
patch para quem fez o software. Algo como:

                   my ($pid) = $input =~ /^(\d+)$/;
                   if ($pid && kill 0, $pid) {# oops - the pid actually exists
                        die "ERROR: I Quit! Another copy of mrtg seems
to be running. Check $pidfile\n";
                   }

> Eu não consigo encontrar o que mudou  e que está causando este
> comportamento. Algo no FreeBSD 7.2 jutamente com perl5.8 ....

Procure por "perl -T", ou "use taint", nos scripts que iniciam o serviço...

> Obrigado Nelson. Não não conhecia o comando splain e já foi para minha
> toolbox.

Para mais informacoes:

    perldoc splain


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