Thread (9 messages) 9 messages, 2 authors, 2021-05-17

Re: [PATCH] lockdown,selinux: fix bogus SELinux lockdown permission checks

From: Casey Schaufler <casey@schaufler-ca.com>
Date: 2021-05-12 17:31:20
Also in: bpf, linux-fsdevel, linux-security-module, lkml, netdev, selinux

On 5/12/2021 9:44 AM, Ondrej Mosnacek wrote:
On Wed, May 12, 2021 at 6:18 PM Casey Schaufler [off-list ref] wrote:
quoted
On 5/12/2021 6:21 AM, Ondrej Mosnacek wrote:
quoted
On Sat, May 8, 2021 at 12:17 AM Casey Schaufler [off-list ref] wrote:
quoted
On 5/7/2021 4:40 AM, Ondrej Mosnacek wrote:
quoted
Commit 59438b46471a ("security,lockdown,selinux: implement SELinux
lockdown") added an implementation of the locked_down LSM hook to
SELinux, with the aim to restrict which domains are allowed to perform
operations that would breach lockdown.

However, in several places the security_locked_down() hook is called in
situations where the current task isn't doing any action that would
directly breach lockdown, leading to SELinux checks that are basically
bogus.

Since in most of these situations converting the callers such that
security_locked_down() is called in a context where the current task
would be meaningful for SELinux is impossible or very non-trivial (and
could lead to TOCTOU issues for the classic Lockdown LSM
implementation), fix this by adding a separate hook
security_locked_down_globally()
This is a poor solution to the stated problem. Rather than adding
a new hook you should add the task as a parameter to the existing hook
and let the security modules do as they will based on its value.
If the caller does not have an appropriate task it should pass NULL.
The lockdown LSM can ignore the task value and SELinux can make its
own decision based on the task value passed.
The problem with that approach is that all callers would then need to
be updated and I intended to keep the patch small as I'd like it to go
to stable kernels as well.

But it does seem to be a better long-term solution - would it work for
you (and whichever maintainer would be taking the patch(es)) if I just
added another patch that refactors it to use the task parameter?
I can't figure out what you're suggesting. Are you saying that you
want to add a new hook *and* add the task parameter?
No, just to keep this patch as-is (and let it go to stable in this
form) and post another (non-stable) patch on top of it that undoes the
new hook and re-implements the fix using your suggestion. (Yeah, it'll
look weird, but I'm not sure how better to handle such situation - I'm
open to doing it whatever different way the maintainers prefer.)
James gets to make the call on this one. If it was my call I would
tell you to make the task parameter change and accept the backport
pain. I think that as a security developer community we spend way too
much time and effort trying to avoid being noticed in source trees.

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help