Re: Non-superuser subscription owners - Mailing list pgsql-hackers
From | Jeff Davis |
---|---|
Subject | Re: Non-superuser subscription owners |
Date | |
Msg-id | c5e61e584736063b266f21f54e9806b640220334.camel@j-davis.com Whole thread Raw |
In response to | Re: Non-superuser subscription owners (Robert Haas <robertmhaas@gmail.com>) |
Responses |
Re: Non-superuser subscription owners
Re: Non-superuser subscription owners Re: Non-superuser subscription owners |
List | pgsql-hackers |
On Mon, 2023-02-06 at 14:40 -0500, Robert Haas wrote: > On Mon, Feb 6, 2023 at 2:18 PM Andres Freund <andres@anarazel.de> > wrote: > > It's decidedly not great, yes. I don't know if it's quite a CVE > > type issue, > > after all, the same is true for any other type of query the > > superuser > > executes. But at the very least the documentation needs to be > > better, with a > > big red box making sure the admin is aware of the problem. > > I don't think that's the same thing at all. A superuser executing a > query interactively can indeed cause all sorts of bad things to > happen, but you don't have to log in as superuser and run DML queries > on tables owned by unprivileged users, and you shouldn't. There are two questions: 1. Is the security situation with logical replication bad? Yes. You nicely summarized just how bad. 2. Is it the same situation as accessing a table owned by a user you don't absolutely trust? Regardless of how the second question is answered, it won't diminish your point that logical replication is in a bad state. If another situation is also bad, we should fix that too. And I think the DML situation is really bad, too. Anyone reading our documentation would find extensive explanations about GRANT/REVOKE, and puzzle over the fine details of exactly how much they trust user foo. Do I trust foo enough for WITH GRANT OPTION? Does foo really need to see all of the columns of this table, or just a subset? But there's no obvious mention that user foo must trust you absolutely in order to exercise the GRANT at all, because you (as table owner) can trivially cause foo to execute arbitrary code. There's no warning or hint or suggestion at runtime to know that you are about to execute someone else's code with your privileges or that it might be dangerous. It gets worse. Let's say that user foo figures that out, and they're extra cautious to SET SESSION AUTHORIZATION or SET ROLE to drop their privileges before accessing a table. No good: the table owner can just craft their arbitrary code with a "RESET SESSION AUTHORIZATION" or a "RESET ROLE" at the top, and the code will still execute with the privileges of user foo. So I don't think "shouldn't" is quite good enough. In the first place, the user needs to know that the risk exists. Second, what if they actually do want to access a table owned by someone else for whatever reason -- how do they do that safely? I can't resist mentioning that these are all SECURITY INVOKER problems. SECURITY INVOKER is insecure unless the invoker absolutely trusts the definer, and that only really makes sense if the definer is a superuser (or something very close). That's why we keep adding exceptions with SECURITY_RESTRICTED_OPERATION, which is really just a way to silently ignore the SECURITY INVOKER label and use SECURITY DEFINER instead. At some point we need to ask: "when is SECURITY INVOKER both safe and useful?" and contain it to those cases, rather than silently ignoring it in an expanding list of cases. I know that the response here is that SECURITY DEFINER is somehow worse. Maybe for superuser-defined functions, it is. But basically, the problems with SECURITY DEFINER all amount to "the author of the code needs to be careful", which is a lot more intuitive than the problems with SECURITY INVOKER. Another option is having some kind SECURITY NONE that would run the code as a very limited-privilege user that can basically only access the catalog. That would be useful for running default expressions and the like without the definer or invoker needing to be careful. -- Jeff Davis PostgreSQL Contributor Team - AWS
pgsql-hackers by date: