Re: [PATCHES] plperl Safe restrictions - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [PATCHES] plperl Safe restrictions
Date
Msg-id 200411111707.iABH7Zn28656@candle.pha.pa.us
Whole thread Raw
In response to Re: plperl Safe restrictions  (Andrew Dunstan <andrew@dunslane.net>)
Responses Re: [PATCHES] plperl Safe restrictions
List pgsql-hackers
Your patch has been added to the PostgreSQL unapplied patches list at:
http://momjian.postgresql.org/cgi-bin/pgpatches

It will be applied as soon as one of the PostgreSQL committers reviews
and approves it.

---------------------------------------------------------------------------


Andrew Dunstan wrote:
> 
> 
> David Helgason wrote:
> 
> > On 14. okt 2004, at 21:09, Andrew Dunstan wrote:
> >
> >> It has just been brought to my attention that we are being very 
> >> restrictive about what we allow to be done in trusted plperl. 
> >> Basically we allow the :default and :base_math set of operations (run 
> >> perldoc Opcode or see 
> >> http://www.perldoc.com/perl5.8.0/lib/Opcode.html for details of what 
> >> these mean). In particular, we do not allow calls to perl's builtin 
> >> sort, which is unpleasant, and on reviewing the list it seems to me 
> >> we could quite reasonably allow access to pack and unpack also. bless 
> >> and sprintf are also likely candidates for inclusion - I have not 
> >> finished reviewing the list, and would welcome advice from perl gurus 
> >> on this.
> >
> >
> > pack and unpack are unfortunately not safe. Very useful, but they 
> > allow write/read access to random memory. It's really a shame perl 
> > doesn't have a pragma to make them safe or have safe versions of them.
> >
> > Bless should be OK, unless sensitive objects are provided to the 
> > procedures.
> >
> > A postgres question I don't know the answer to is whether allowing the 
> > user to trigger a segfault is a security problem. If it isn't, several 
> > opcodes may probably be allowed, including sort and sprintf. If it is, 
> > well, you need only follow the perl5-porters list to know that there's 
> > banal perl structures are continuously being found that will segfault 
> > perl, some at compile time, other at runtime.
> 
> 
> OK, based on this and some further thought, I have prepared the attached 
> patch which does the right thing, I think, both in terms of what we 
> allow and what we don't.
> 
> First, we tighten security by disallowing access to srand and IO 
> functions on existing filehandles (other IO ops are already disallowed).
> 
> The we relax the restrictions by allowing access to perl's sort, sprintf 
> and time routines. I decided against pack/unpack based on the above, and 
> also decided that I couldn't think of any case where bless would have 
> any practical use - although that might change later. I'm trying to keep 
> changes minimal here. I don't believe that "time" carries any 
> significant security implications, and I think the dangers from "sort" 
> and "sprintf" are not so great as to disallow them. They might cause a 
> SEGV in a pathological case, but that doesn't give the user access to 
> the machine - if they can login to postgres they can probably mount any 
> number of DOS attacks anyway.
> 
> To answer David's question, the man says this about trusted functions: 
> "the TRUSTED flag should only be given for languages that do not allow 
> access to database server internals or the file system".  I think the 
> changes I propose fit in with that statement.
> 
> The patch also does some other inconsequential tidying of overlong 
> lines, and removes some unnecessary ops in the unsafe case. These are 
> basically cosmetic - the only significant part is replacing this:
> 
>     $PLContainer->permit(':base_math');
> 
> with this:
> 
>     $PLContainer->permit(qw[:base_math !:base_io !srand sort sprintf time]);
> 
> I have tested and it appears to do the right thing, both for the things 
> excluded and those included.
> 
> cheers
> 
> andrew
> 
> 
> 


> 
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
> 
>                http://www.postgresql.org/docs/faqs/FAQ.html

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


pgsql-hackers by date:

Previous
From: "John Hansen"
Date:
Subject: Re: ltree PostgreSQL Module
Next
From: Oleg Bartunov
Date:
Subject: Re: ltree PostgreSQL Module