On Sat, Aug 24, 2019 at 10:05:46PM +0200, Christoph Zwerschke wrote:
> Am 16.08.2019 um 19:58 schrieb Shoaib Lari:
> > I was wondering if the PyGreSQL community has any plans to address
> > PostgreSQL security vulnerability
> > https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path.
> 
> Hi Shoaib, thanks for bringing this to our attention.

Yes, thanks for mentioning it.

> The internal query used by the type cache looks something like this:
> 
> SELECT oid, typname, ... FROM pg_type WHERE oid=%s
> 
> As far as I understand, to make things secure at least what concerns
> PyGreSQL, we would need to change that query to:
> 
> SELECT oid, typname, ... FROM pg_catalog.pg_type
> WHERE oid OPERATOR(pg.catalog.=) %s

Yes, I think

> This would make the queries look more ugly and lengthy. Not sure about the
> performance impact - maybe it would be even faster because of the explicit
> schema name.

I agree that they're uglier...

> What do others think? Should we make these changes?

But I tend to think we should add schema quals, since that's what postgres
does.

See the commit for that CVE:
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=3d2aed664ee8271fd6c721ed0aa10168cda112ea;hp=3bf05e096b9f8375e640c5d7996aa57efd7f240c

But it looks like that convention dates back to:
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=039cb479884abc28ee494f6cf6c5e7ec26b88fc8

See describe.c
https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/bin/psql/describe.c

For example \d makes a half dozen queries which look like:

[pryzbyj@database ~]$ psql ts -Ec '\d pg_class'
********* QUERY **********
SELECT c.oid,
  n.nspname,
  c.relname
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname OPERATOR(pg_catalog.~) '^(pg_class)$'
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 2, 3;
**************************

> Now, if someone was able to do that I think your goose has been cooked
> anyway since nearly every query will be affected.
...
> I think in practice you need to rely on users not being able to create
> objects in the public schema, otherwise you're set for deeper troubles
> anyway, no matter how secure your API is.

| Without adjusting the configuration or access control settings, any user that 
can connect to a database can also create objects in the public schema for that 
database. 

It's true that one shouldn't create untrusted DB users, but there's a privilege
system in place and it's intended to allow users to be at least partially
segregated.  If postgres/pygres and other projects don't use schema quals, then
it's hard to imagine that a typical admin will do so.
_______________________________________________
PyGreSQL mailing list
PyGreSQL@Vex.Net
https://mail.vex.net/mailman/listinfo/pygresql

Reply via email to