[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