net: Update the sysctl permissions handler to test effective uid/gid
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): CAGXu5j+88Bb0Mnbiyq-bTzkn59YXOefCrXtht-evYhq-yUfYFg@mail.gmail.com
PATCH 1/1 net: Update the sysctl permissions handler to test effective uid/gid
Quoted 23 lines · On Tue, 20 Aug 2013 11:40:04 -0500 Eric Sandeen <[email protected]> wrote:
This was brought up in a Red Hat bug (which may be marked private, I'm sorry):
Bug 987055 - open
O_WRONLYsucceeds on some root owned files in /proc for process running with unprivileged EUID"On RHEL7 some of the files in /proc can be opened for writing by an unprivileged EUID."
The flaw existed upstream as well last I checked.
This commit in kernel v3.8 caused the regression:
commit
cff109768b2d9c03095848f4cd4b0754117262aaAuthor: Eric W. Biederman <[email protected]> Date: Fri Nov 16 03:03:01 2012 +0000net: Update the per network namespace sysctls to be available to the network namespace owner
- Allow anyone with
CAP_NET_ADMINrights in the user namespace of the the netowrk namespace to change sysctls.
- Allow anyone the uid of the user namespace root the same permissions over the network namespace sysctls as the global root.
- Allow anyone with gid of the user namespace root group the same permissions over the network namespace sysctl as the global root group.
Quoted 8 lines
Signed-off-by "Eric W. Biederman" <[email protected]>Signed-off-by David S. Miller <[email protected]>because it changed /sys/net's special permission handler to test
current_uid, notcurrent_euid; same for current_gid/current_egid.So in this case, root cannot drop privs via set[ug]id, and retains all privs in this codepath.
Modify the code to use current_euid(), and in_egroup_p, as in done in fs/proc/proc_sysctl.c:test_perm()
---
Resubmitting as it looks like this fix got lost. This patch applies cleanly against both net-next and linux-3.12-rc1, and likely quite a few early kernel revisions.
net/sysctl_net.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
net/sysctl_net.c +2 -2
@@ -47,12 +47,12 @@ static int net_ctl_permissions(struct ctl_table_header *head,/* Allow network administrator to have same access as root. */ if (ns_capable (net->user_ns,CAP_NET_ADMIN ) || -uid_eq (root_uid,current_uid ())) { +uid_eq (root_uid,current_euid ())) {int mode = (table->mode >>6 ) &7 ;return (mode <<6 ) | (mode <<3 ) | mode; }/* Allow netns root group to have the same access as the root group */ -if (gid_eq (root_gid,current_gid ())) { +if (in_egroup_p (root_gid)) {int mode = (table->mode >>3 ) &7 ;return (mode <<3 ) | mode; }
Signature · 1 line
1.7.5.4
David Miller
maintainerFrom: [email protected] (Eric W. Biederman)
Date: Sat, 05 Oct 2013 13:15:30 -0700
Quoted 34 lines · On Tue, 20 Aug 2013 11:40:04 -0500 Eric Sandeen <[email protected]> wrote:
Quoted 23 lines
This was brought up in a Red Hat bug (which may be marked private, I'm sorry):
Bug 987055 - open
O_WRONLYsucceeds on some root owned files in /proc for process running with unprivileged EUID"On RHEL7 some of the files in /proc can be opened for writing by an unprivileged EUID."
The flaw existed upstream as well last I checked.
This commit in kernel v3.8 caused the regression:
commit
cff109768b2d9c03095848f4cd4b0754117262aaAuthor: Eric W. Biederman <[email protected]> Date: Fri Nov 16 03:03:01 2012 +0000net: Update the per network namespace sysctls to be available to the network namespace owner
- Allow anyone with
CAP_NET_ADMINrights in the user namespace of the the netowrk namespace to change sysctls.
- Allow anyone the uid of the user namespace root the same permissions over the network namespace sysctls as the global root.
- Allow anyone with gid of the user namespace root group the same permissions over the network namespace sysctl as the global root group.Quoted 8 lines
Signed-off-by "Eric W. Biederman" <[email protected]>Signed-off-by David S. Miller <[email protected]>because it changed /sys/net's special permission handler to test
current_uid, notcurrent_euid; same for current_gid/current_egid.So in this case, root cannot drop privs via set[ug]id, and retains all privs in this codepath.
Quoted 7 lines
Modify the code to use
current_euid(), andin_egroup_p, as in done in fs/proc/proc_sysctl.c:test_perm()Reviewed-by Eric Sandeen <[email protected]>Reported-by Eric Sandeen <[email protected]>Signed-off-by "Eric W. Biederman" <[email protected]>
Applied and queued up for -stable, thanks.