Dear Postfix users,

I'm really grateful to Wietse who thankfully raised concerns regarding Perl querying the verified senders database using postmap via the shell as there was a real chance the sender (easily faked) could carry out evil. My use of 'backticks' was a very bad idea as it turns out. I managed to escape the script myself so very easy to professional exploiters to do so. Lesson learned the Wietse way, not the way that ends up with flames and spilt tears!

I think(?) that I have found the solution courtesy of https://www.w3.org/Security/faq/.back/wwwsf5.html and perldocs.org (open).
I modified one of the W3C examples and shoved it into my function  :

sub postmap
{
  my $sender=shift;
  $senderchk=$sender;
  $senderchk =~ s/[\$#~!&*{}()\[\];,:?^ `\\\/]+//g; # check for undesirable 
chars even if legal
  if($sender ne $senderchk) { return "9:0:0:Database not probed. Suspect characters 
detected in sender address.)" }
my $sf ="lmdb:/var/lib/postfix/verified_senders_2021";
  $vsresult="";
  $perlfork = open(POSTMAP,"-|"); die "Couldn't open perl fork" unless 
defined($perlfork);
  exec "/usr/sbin/postmap", "-fq", "$sender", "$sf", or die "Couldn't execute 
postmap" if $perlfork == 0;
  while (<POSTMAP>) { $vsresult= "$_"; }
  close POSTMAP;
  return "$vsresult";
}


I'm hoping this will be that last on this subject but I'll put it out to you who have a superior knowledge of security. Is this method now safe?  Please, if anyone can see any security issues, do let me know. Apologies to the Perl purists. I'm pretty sure I could have done better there, but it does work .My main concern is if its safe.

Many thanks to you all,


Best wishes,
Mick.

Reply via email to