From: Eric Biggers ebiggers@google.com
commit 4aa68e07d845562561f5e73c04aa521376e95252 upstream
When checking for permission to view keys whilst reading from /proc/keys, we should use the credentials with which the /proc/keys file was opened. This is because, in a classic type of exploit, it can be possible to bypass checks for the *current* credentials by passing the file descriptor to a suid program.
Following commit 34dbbcdbf633 ("Make file credentials available to the seqfile interfaces") we can finally fix it. So let's do it.
Signed-off-by: Eric Biggers ebiggers@google.com Signed-off-by: David Howells dhowells@redhat.com Signed-off-by: Zubin Mithra zsm@chromium.org --- * A test confirmed that when reading from a file descriptor corresponding to /proc/keys the permissions for the reader were being used instead of the permissions of the user who opened the file.
This patch is required for 4.4.y as well; however, the original patch will apply cleanly there. I'll send a separate request for the same.
security/keys/proc.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/security/keys/proc.c b/security/keys/proc.c index ec493ddadd111..f2c7e090a66d7 100644 --- a/security/keys/proc.c +++ b/security/keys/proc.c @@ -187,7 +187,7 @@ static int proc_keys_show(struct seq_file *m, void *v)
struct keyring_search_context ctx = { .index_key = key->index_key, - .cred = current_cred(), + .cred = m->file->f_cred, .match_data.cmp = lookup_user_key_possessed, .match_data.raw_data = key, .match_data.lookup_type = KEYRING_SEARCH_LOOKUP_DIRECT, @@ -207,11 +207,7 @@ static int proc_keys_show(struct seq_file *m, void *v) } }
- /* check whether the current task is allowed to view the key (assuming - * non-possession) - * - the caller holds a spinlock, and thus the RCU read lock, making our - * access to __current_cred() safe - */ + /* check whether the current task is allowed to view the key */ rc = key_task_permission(key_ref, ctx.cred, KEY_NEED_VIEW); if (rc < 0) return 0;
On Thu, Mar 14, 2019 at 09:26:53AM -0700, Zubin Mithra wrote:
From: Eric Biggers ebiggers@google.com
commit 4aa68e07d845562561f5e73c04aa521376e95252 upstream
When checking for permission to view keys whilst reading from /proc/keys, we should use the credentials with which the /proc/keys file was opened. This is because, in a classic type of exploit, it can be possible to bypass checks for the *current* credentials by passing the file descriptor to a suid program.
Following commit 34dbbcdbf633 ("Make file credentials available to the seqfile interfaces") we can finally fix it. So let's do it.
Signed-off-by: Eric Biggers ebiggers@google.com Signed-off-by: David Howells dhowells@redhat.com Signed-off-by: Zubin Mithra zsm@chromium.org
- A test confirmed that when reading from a file descriptor
corresponding to /proc/keys the permissions for the reader were being used instead of the permissions of the user who opened the file.
This patch is required for 4.4.y as well; however, the original patch will apply cleanly there. I'll send a separate request for the same.
Now queued up, thanks.
greg k-h
linux-stable-mirror@lists.linaro.org