Re: Bug plperl.c
Mark Murawski <markm-lists@intellasoft.net>
From: Mark Murawski <markm-lists@intellasoft.net>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2022-03-08T19:59:17Z
Lists: pgsql-bugs
Hi Tom, No rush on the bug fix, just making sure you don't need anything else from me on the reproduction. Yeah I realized my patch wasn't a full solution after sending it in... My test environment was a little wiggity, and I compiled and tested... but noticed I actually wasn't using the new build... (and thought that it was fixed with my change) Based on the side-effects I think it does make sense to block queries entirely during parse On 2/25/22 16:36, Tom Lane wrote: > Mark Murawski <markm-lists@intellasoft.net> writes: >> Were you able to reproduce using the updated example? > Sorry, this wasn't at the top of my to-do queue. It does reproduce > for me, and I think what we need to do about it is the attached. > In the normal code paths, this change will disallow usage of SPI until > we have completed compile_plperl_function and have a valid "prodesc" > to look at. I didn't care for your proposed workaround because > > (1) it'd allow execution of non-read-only code during compilation > of a supposedly read-only function; > > (2) it didn't patch the dozen or so other places where plperl SPI > functions could try to dereference prodesc; > > (3) allowing code execution during function validation is, if not > an actual security hole, certainly on the hairy edge of being one. > > I'm somewhat comforted about (3) because it seems the problem is only > reachable from plperlu not plperl. It's still pretty scary though. > > I realize that this solution might make your use-case rather awkward. > As far as function validation goes, you can still create your functions > by setting check_function_bodies = off. If you feel you need to have > Perl code that executes during compilation otherwise, I'm not sure > what to tell you, except that it doesn't seem like a great idea. > > I also noticed while looking at this that the relatively-recently-added > plperl_spi_commit and plperl_spi_rollback functions neglected to do > check_spi_usage_allowed(), so this fixes that too. > > regards, tom lane >
Commits
-
Disallow execution of SPI functions during plperl function compilation.
- 31befa6be620 11.16 landed
- 0f7b62f29d16 12.11 landed
- 9b2d762a283d 13.7 landed
- ac910bb2328f 14.3 landed
- 638300fef541 15.0 landed
- 4936747c4772 10.21 landed