Re: FW: Localizing %SIG in Safe.pm 2.{35,36,37} crashes POE::Wheel::Run ...
[email protected] (Rafael Garcia-Suarez) Wed, 17 Jul 2013 09:30:46 +0200
| Newsgroups | perl.poe,perl.perl5.porters |
|---|---|
| Message-ID | <CAMoYMM8vFSurnOZ2z6GQ-ORThAAU1F1hEM-ViQn87TAq9XBfkQ@mail.gmail.com> |
Hi all Breaking out a Safe compartment is all about compiling code that will be executed later. It happens that there are working exploits that use a combination of %SIG and eval inside the safe-evaled block to execute such compilations; then arbitrary commands can be run on any signal received by the process that compiled the safe compartment. (I repeat it again -- without this fix it's possible to make perl execute `rm -fr /` through code passed to Safe. So the fix stays.) The fix I put in Safe was to simply wipe out %SIG in the Safe compartment. In theory that should not have been necessary, since %SIG is not shared between %main:: and the Safe root stash, but that's apparently not how the perl internals work; so, to have a fix back-portable to older perls, I did not found any other way. If someone wants to investigate, I'll be happy to provide details... Also I'd like to understand why you need to set signal handlers in a Safe compartment. As far as I can tell this has only ever worked by accident. On 16 July 2013 18:00, Markus Jansen <[email protected]> wrote: > Hi, > > FYI ... hope none of you wastes time with this really nasty trap ... > > Best regards, > Markus > > -----Original Message----- > From: Markus Jansen > Sent: Tuesday, July 16, 2013 5:57 PM > To: [email protected] > Cc: Markus Jansen > Subject: Localizing %SIG in Safe.pm 2.{35,36,37} crashes POE::Wheel::Run = ... > > > This is a bug report for perl from [email protected], generated = with the help of perlbug 1.39 running under perl 5.18.0. > > > ----------------------------------------------------------------- > [Please describe your issue here] > > Dear Perl5 Porters, > > localizing %SIG in Safe.pm 2.35 (on CPAN, 2.{35,36,37} in Perl core) may = be a great step for security, but it unfortunatately spoils POE::Wheel::Run= (basically POE and all other asynchronous frameworks dealing with external= processes). > > The symptom experienced is that your application might sooner or later cr= ash (reliably when using POE::Component::Resolver upon exiting a Sidecar su= bprocess) with the following famous last words: > > Signal SIGCHLD received, but no signal handler set. > > Please consider a version (also on CPAN) of Safe.pm which has e.g. the lo= calization of %SIG as a switchable feature. > > Best regards, > Markus > > > > [Please do not change anything below this line] > ----------------------------------------------------------------- > --- > Flags: > category=3Dlibrary > severity=3Dcritical > module=3DSafe > --- > Site configuration information for perl 5.18.0: > > Configured by ericsson at Fri Jul 12 19:17:48 CEST 2013. > > Summary of my perl5 (revision 5 version 18 subversion 0) configuration: > > Platform: > osname=3Dlinux, osvers=3D2.6.16.60-0.42.10-smp, archname=3Dx86_64-lin= ux-thread-multi > uname=3D'linux sekix562 2.6.16.60-0.42.10-smp #1 smp tue apr 27 05:11= :27 utc 2010 x86_64 x86_64 x86_64 gnulinux ' > config_args=3D'-d -e -O -D cc=3Dgcc -D prefix=3D/vobs/cc/CCA-perl01/p= erl5_Linux_x64__________sixtyfive_char_path/prod -D usemultiplicity -U use5= 005threads -D usedl -D useshrplib -D libperl=3Dlibcmacperl.so -U usemymallo= c -D cf_by=3Dericsson -D [email protected] -D perladm= [email protected] -D uselargefiles -D usethreads -D useithr= eads -D use64bitall -D ldcc=3DCC -D optimize=3D-O3 -D locincpth=3D/vobs/cc/= CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/plib/include /vobs/= cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/plib/apache/incl= ude -D loclibpth=3D/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_c= har_path/plib/lib /vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_ch= ar_path/plib/apache/lib -D lddlflags=3D-shared -lpthread -Wl,-L/vobs/cc/CCA= -perl01/perl5_Linux_x64__________sixtyfive_char_path/prod/lib/5.18.0/x86_64= -linux-thread-multi/CORE -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Linux_x64____= ______sixtyfive_char_path/prod/lib/5.18.0 > /x86_64-linux-thread-multi/CORE -Wl,-L/vobs/cc/CCA-perl01/perl5_Linux_x6= 4__________sixtyfive_char_path/plib/lib -Wl,-rpath,/vobs/cc/CCA-perl01/perl= 5_Linux_x64__________sixtyfive_char_path/plib/lib -Wl,-L/vobs/cc/CCA-perl01= /perl5_Linux_x64__________sixtyfive_char_path/plib/apache/lib -Wl,-rpath,/v= obs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/plib/apache/= lib -Wl,--enable-new-dtags -D ldflags=3D-lpthread -Wl,-L/vobs/cc/CCA-perl01= /perl5_Linux_x64__________sixtyfive_char_path/prod/lib/5.18.0/x86_64-linux-= thread-multi/CORE -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Linux_x64__________s= ixtyfive_char_path/prod/lib/5.18.0/x86_64-linux-thread-multi/CORE -Wl,-L/vo= bs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/plib/lib -Wl,= -rpath,/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/pli= b/lib -Wl,-L/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_pat= h/plib/apache/lib -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Linux_x64__________s= ixtyfive_char_path/ > plib/apache/lib -Wl,--enable-new-dtags -D ccdlflags=3D-Bdynamic -Wl,-L/v= obs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/prod/lib/5.1= 8.0/x86_64-linux-thread-multi/CORE -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Lin= ux_x64__________sixtyfive_char_path/prod/lib/5.18.0/x86_64-linux-thread-mul= ti/CORE -Wl,-L/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_p= ath/plib/lib -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyf= ive_char_path/plib/lib -Wl,-L/vobs/cc/CCA-perl01/perl5_Linux_x64__________s= ixtyfive_char_path/plib/apache/lib -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Lin= ux_x64__________sixtyfive_char_path/plib/apache/lib -D ldlibpthname=3DLD_LI= BRARY_PATH -D cccdlflags=3D-fPIC -D dlsrc=3Ddl_dlopen.xs -D ccflags=3D-O2 -= D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -pthread -DPERL_IMPLICIT_CONT= EXT -DPERL_USE_SAFE_PUTENV -m64 -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BI= TS=3D64 -fPIC -D so=3Dso -D libswanted=3Dnsl dl m crypt pthread c' > hint=3Drecommended, useposix=3Dtrue, d_sigaction=3Ddefine > useithreads=3Ddefine, usemultiplicity=3Ddefine > useperlio=3Ddefine, d_sfio=3Dundef, uselargefiles=3Ddefine, usesocks= =3Dundef > use64bitint=3Ddefine, use64bitall=3Ddefine, uselongdouble=3Dundef > usemymalloc=3Dn, bincompat5005=3Dundef > Compiler: > cc=3D'gcc', ccflags =3D'-D_REENTRANT -D_GNU_SOURCE -O2 -D_REENTRANT -= D_GNU_SOURCE -DTHREADS_HAVE_PIDS -pthread -DPERL_IMPLICIT_CONTEXT -DPERL_US= E_SAFE_PUTENV -m64 -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=3D64 -fPIC= -fno-strict-aliasing -fstack-protector -I/vobs/cc/CCA-perl01/perl5_Linux_x= 64__________sixtyfive_char_path/plib/include -I/vobs/cc/CCA-perl01/perl5_Li= nux_x64__________sixtyfive_char_path/plib/apache/include -D_LARGEFILE_SOURC= E -D_FILE_OFFSET_BITS=3D64', > optimize=3D'-O3', > cppflags=3D'-D_REENTRANT -D_GNU_SOURCE -O2 -D_REENTRANT -D_GNU_SOURCE= -DTHREADS_HAVE_PIDS -pthread -DPERL_IMPLICIT_CONTEXT -DPERL_USE_SAFE_PUTEN= V -m64 -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=3D64 -fPIC -fno-strict= -aliasing -fstack-protector -I/vobs/cc/CCA-perl01/perl5_Linux_x64__________= sixtyfive_char_path/plib/include -I/vobs/cc/CCA-perl01/perl5_Linux_x64_____= _____sixtyfive_char_path/plib/apache/include' > ccversion=3D'', gccversion=3D'4.1.2 20070115 (SUSE Linux)', gccosandv= ers=3D'' > intsize=3D4, longsize=3D8, ptrsize=3D8, doublesize=3D8, byteorder=3D1= 2345678 > d_longlong=3Ddefine, longlongsize=3D8, d_longdbl=3Ddefine, longdblsiz= e=3D16 > ivtype=3D'long', ivsize=3D8, nvtype=3D'double', nvsize=3D8, Off_t=3D'= off_t', lseeksize=3D8 > alignbytes=3D8, prototype=3Ddefine > Linker and Libraries: > ld=3D'gcc', ldflags =3D'-lpthread -Wl,-L/vobs/cc/CCA-perl01/perl5_Lin= ux_x64__________sixtyfive_char_path/prod/lib/5.18.0/x86_64-linux-thread-mul= ti/CORE -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_c= har_path/prod/lib/5.18.0/x86_64-linux-thread-multi/CORE -Wl,-L/vobs/cc/CCA-= perl01/perl5_Linux_x64__________sixtyfive_char_path/plib/lib -Wl,-rpath,/vo= bs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/plib/lib -Wl,= -L/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/plib/apa= che/lib -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_c= har_path/plib/apache/lib -Wl,--enable-new-dtags -fstack-protector' > libpth=3D/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_= path/plib/lib /vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_p= ath/plib/apache/lib /lib/../lib64 /usr/lib/../lib64 /lib /usr/lib /usr/loca= l/lib /lib64 /usr/lib64 /usr/local/lib64 > libs=3D-lnsl -ldl -lm -lcrypt -lpthread -lc > perllibs=3D-lnsl -ldl -lm -lcrypt -lpthread -lc > libc=3D/lib/libc-2.4.so, so=3Dso, useshrplib=3Dtrue, libperl=3Dlibcma= cperl.so > gnulibc_version=3D'2.4' > Dynamic Linking: > dlsrc=3Ddl_dlopen.xs, dlext=3Dso, d_dlsymun=3Dundef, ccdlflags=3D'-Bd= ynamic -Wl,-L/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_pa= th/prod/lib/5.18.0/x86_64-linux-thread-multi/CORE -Wl,-rpath,/vobs/cc/CCA-p= erl01/perl5_Linux_x64__________sixtyfive_char_path/prod/lib/5.18.0/x86_64-l= inux-thread-multi/CORE -Wl,-L/vobs/cc/CCA-perl01/perl5_Linux_x64__________s= ixtyfive_char_path/plib/lib -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Linux_x64_= _________sixtyfive_char_path/plib/lib -Wl,-L/vobs/cc/CCA-perl01/perl5_Linux= _x64__________sixtyfive_char_path/plib/apache/lib -Wl,-rpath,/vobs/cc/CCA-p= erl01/perl5_Linux_x64__________sixtyfive_char_path/plib/apache/lib' > cccdlflags=3D'-fPIC', lddlflags=3D'-shared -lpthread -Wl,-L/vobs/cc/C= CA-perl01/perl5_Linux_x64__________sixtyfive_char_path/prod/lib/5.18.0/x86_= 64-linux-thread-multi/CORE -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Linux_x64__= ________sixtyfive_char_path/prod/lib/5.18.0/x86_64-linux-thread-multi/CORE = -Wl,-L/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/plib= /lib -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char= _path/plib/lib -Wl,-L/vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive= _char_path/plib/apache/lib -Wl,-rpath,/vobs/cc/CCA-perl01/perl5_Linux_x64__= ________sixtyfive_char_path/plib/apache/lib -Wl,--enable-new-dtags -fstack-= protector' > > Locally applied patches: > > > --- > @INC for perl 5.18.0: > /vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/prod= /lib/site_perl/5.18.0/x86_64-linux-thread-multi > /vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/prod= /lib/site_perl/5.18.0 > /vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/prod= /lib/5.18.0/x86_64-linux-thread-multi > /vobs/cc/CCA-perl01/perl5_Linux_x64__________sixtyfive_char_path/prod= /lib/5.18.0 > . > > --- > Environment for perl 5.18.0: > HOME=3D/home/eedmja > LANG=3Den_US.UTF-8 > LANGUAGE (unset) > LD_LIBRARY_PATH (unset) > LOGDIR (unset) > PATH=3D/tmp/_cc_CCA-perl01/perl5_Linux_x64__________sixtyfive_char_pa= th/prod/bin:/tmp/_cc_CCA-perl01/perl5_Linux_x64__________sixtyfive_char_pat= h/plib/bin:/bin:/usr/bin:/sbin:/usr/sbin:/opt/gnome/bin:/opt/kde3/bin:/usr/= bin/X11:/home/eedmja/bin:/opt/rational/clearcase/bin > PERL_BADLANG (unset) > SHELL=3D/bin/tcsh