-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
se agrego el archivo de configuracion de zen add sysctl
- Loading branch information
Showing
1 changed file
with
133 additions
and
0 deletions.
There are no files selected for viewing
133 changes: 133 additions & 0 deletions
133
0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-CLONE_NEWUSER.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
From a8d736bad70d4062a14c29bdcbed71bef7b575f5 Mon Sep 17 00:00:00 2001 | ||
From: "Jan Alexander Steffens (heftig)" <[email protected]> | ||
Date: Mon, 16 Sep 2019 04:53:20 +0200 | ||
Subject: [PATCH 01/15] ZEN: Add sysctl and CONFIG to disallow unprivileged | ||
CLONE_NEWUSER | ||
|
||
Our default behavior continues to match the vanilla kernel. | ||
--- | ||
init/Kconfig | 16 ++++++++++++++++ | ||
kernel/fork.c | 15 +++++++++++++++ | ||
kernel/sysctl.c | 12 ++++++++++++ | ||
kernel/user_namespace.c | 7 +++++++ | ||
4 files changed, 50 insertions(+) | ||
|
||
diff --git a/init/Kconfig b/init/Kconfig | ||
index b4daad2bac23..362f82c5ec07 100644 | ||
--- a/init/Kconfig | ||
+++ b/init/Kconfig | ||
@@ -1118,6 +1118,22 @@ config USER_NS | ||
|
||
If unsure, say N. | ||
|
||
+config USER_NS_UNPRIVILEGED | ||
+ bool "Allow unprivileged users to create namespaces" | ||
+ default y | ||
+ depends on USER_NS | ||
+ help | ||
+ When disabled, unprivileged users will not be able to create | ||
+ new namespaces. Allowing users to create their own namespaces | ||
+ has been part of several recent local privilege escalation | ||
+ exploits, so if you need user namespaces but are | ||
+ paranoid^Wsecurity-conscious you want to disable this. | ||
+ | ||
+ This setting can be overridden at runtime via the | ||
+ kernel.unprivileged_userns_clone sysctl. | ||
+ | ||
+ If unsure, say Y. | ||
+ | ||
config PID_NS | ||
bool "PID Namespaces" | ||
default y | ||
diff --git a/kernel/fork.c b/kernel/fork.c | ||
index 755d8160e001..ed909f8050b2 100644 | ||
--- a/kernel/fork.c | ||
+++ b/kernel/fork.c | ||
@@ -106,6 +106,11 @@ | ||
|
||
#define CREATE_TRACE_POINTS | ||
#include <trace/events/task.h> | ||
+#ifdef CONFIG_USER_NS | ||
+extern int unprivileged_userns_clone; | ||
+#else | ||
+#define unprivileged_userns_clone 0 | ||
+#endif | ||
|
||
/* | ||
* Minimum number of threads to boot the kernel | ||
@@ -1779,6 +1784,10 @@ static __latent_entropy struct task_struct *copy_process( | ||
if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS)) | ||
return ERR_PTR(-EINVAL); | ||
|
||
+ if ((clone_flags & CLONE_NEWUSER) && !unprivileged_userns_clone) | ||
+ if (!capable(CAP_SYS_ADMIN)) | ||
+ return ERR_PTR(-EPERM); | ||
+ | ||
/* | ||
* Thread groups must share signals as well, and detached threads | ||
* can only be started up within the thread group. | ||
@@ -2836,6 +2845,12 @@ int ksys_unshare(unsigned long unshare_flags) | ||
if (unshare_flags & CLONE_NEWNS) | ||
unshare_flags |= CLONE_FS; | ||
|
||
+ if ((unshare_flags & CLONE_NEWUSER) && !unprivileged_userns_clone) { | ||
+ err = -EPERM; | ||
+ if (!capable(CAP_SYS_ADMIN)) | ||
+ goto bad_unshare_out; | ||
+ } | ||
+ | ||
err = check_unshare_flags(unshare_flags); | ||
if (err) | ||
goto bad_unshare_out; | ||
diff --git a/kernel/sysctl.c b/kernel/sysctl.c | ||
index 70665934d53e..9797869ed829 100644 | ||
--- a/kernel/sysctl.c | ||
+++ b/kernel/sysctl.c | ||
@@ -111,6 +111,10 @@ | ||
static int sixty = 60; | ||
#endif | ||
|
||
+#ifdef CONFIG_USER_NS | ||
+extern int unprivileged_userns_clone; | ||
+#endif | ||
+ | ||
static int __maybe_unused neg_one = -1; | ||
static int __maybe_unused two = 2; | ||
static int __maybe_unused four = 4; | ||
@@ -1881,6 +1885,15 @@ | ||
.mode = 0644, | ||
.proc_handler = proc_dointvec, | ||
}, | ||
+#endif | ||
+#ifdef CONFIG_USER_NS | ||
+ { | ||
+ .procname = "unprivileged_userns_clone", | ||
+ .data = &unprivileged_userns_clone, | ||
+ .maxlen = sizeof(int), | ||
+ .mode = 0644, | ||
+ .proc_handler = proc_dointvec, | ||
+ }, | ||
#endif | ||
#ifdef CONFIG_PROC_SYSCTL | ||
{ | ||
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c | ||
index 8eadadc478f9..c36ecd19562c 100644 | ||
--- a/kernel/user_namespace.c | ||
+++ b/kernel/user_namespace.c | ||
@@ -21,6 +21,13 @@ | ||
#include <linux/bsearch.h> | ||
#include <linux/sort.h> | ||
|
||
+/* sysctl */ | ||
+#ifdef CONFIG_USER_NS_UNPRIVILEGED | ||
+int unprivileged_userns_clone = 1; | ||
+#else | ||
+int unprivileged_userns_clone; | ||
+#endif | ||
+ | ||
static struct kmem_cache *user_ns_cachep __read_mostly; | ||
static DEFINE_MUTEX(userns_state_mutex); | ||
|
||
-- | ||
2.25.0 | ||
|