Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp4127092rwb; Tue, 16 Aug 2022 15:14:01 -0700 (PDT) X-Google-Smtp-Source: AA6agR5HmDa2w8JkhTKZZYrYs5QtEcNyNCSDwE6dZSN+YOrQIOQlDh93m9cXWxWQ88gtU9JVz9wn X-Received: by 2002:a17:907:969f:b0:730:df57:123d with SMTP id hd31-20020a170907969f00b00730df57123dmr15087215ejc.430.1660688041194; Tue, 16 Aug 2022 15:14:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660688041; cv=none; d=google.com; s=arc-20160816; b=M8dgFRmrEqa4YMJEmy6HAW/sknPYBDNJJlAi0t6p1wALio/oIsG+S+adFBrqEPprA7 huVXv9cnIfg+z9zRglifGvnQH5IwKWJ4cuwaTTS4gyCJlx33TXDouV/PR5CvsDf83FrI GkUkwQN3mcO/NWparmPhJXBf9Vd7sahoU0AwCQzuzoiLPvPsinCWsFwwefjBxsxxhsYY kGMnhkfNYArc/jOuXmA1CdRtsxNM6yep80+fJDgAdrHfpJNCeh+0OTjKJ6+xuyZ/FGeM 7XxkyybZYQb8aRa0ycY5eeIQ0e3iQRlOfBaLYkcjnuY2UbLVzFxY7F/NUUj0QOGK+Ool HGCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=cINbdQx9vuTQNR1x1rEsEZ4jjGMUWdf19tZ6cChgAaA=; b=lNAWFcFaSlsFiPTXXQB1YY3YKIeCUMC/EBR/mTG/GG8meM5lIisTndQ846upOLsOgF jz/VVOxWEg4ZieiFb+MjRucIyLSUVFnMDLj0g6CqfxIExsgw8mYlfR8vUFRcs/oYUco+ eQproHKJ1L5YpPjYW+qEvcGgkezFdlwQDvHv0MUxdO4VJC9o2TTeMcPfJ1MJBVJ8qoW9 MgDTEn7n1DP12PmaTVzN4nzRDn4GtBZPIwn2kFo02yxYYlRI6hLo42gxui/sPjcn0uM5 j5tDfq5bbqRtYiU9f4Nfj0B1OkaJSwaxZxmeUkuA2ExhoTf98ah2e9shfm8rvs6duCWA 8GqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@paul-moore-com.20210112.gappssmtp.com header.s=20210112 header.b=CJvwxuwd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ho35-20020a1709070ea300b0072e6774827asi14357836ejc.915.2022.08.16.15.13.36; Tue, 16 Aug 2022 15:14:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@paul-moore-com.20210112.gappssmtp.com header.s=20210112 header.b=CJvwxuwd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237795AbiHPVv2 (ORCPT + 99 others); Tue, 16 Aug 2022 17:51:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37328 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237719AbiHPVv0 (ORCPT ); Tue, 16 Aug 2022 17:51:26 -0400 Received: from mail-oi1-x232.google.com (mail-oi1-x232.google.com [IPv6:2607:f8b0:4864:20::232]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 824BD8E0C7 for ; Tue, 16 Aug 2022 14:51:23 -0700 (PDT) Received: by mail-oi1-x232.google.com with SMTP id w197so13529880oie.5 for ; Tue, 16 Aug 2022 14:51:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paul-moore-com.20210112.gappssmtp.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=cINbdQx9vuTQNR1x1rEsEZ4jjGMUWdf19tZ6cChgAaA=; b=CJvwxuwd+0rt/bo4TkCNqYjlT4SJ6Aesn0zM6uXzP6TCT+LreKW44m+4ak4S4QcpN8 Z3emQFWvCmqT6EmdYqBJBiTKDxs25SPIFHJWRc2lCFCaMDG285aPNFHSJURzJUXrItiL Ui0T4+b4CX6rGWwwzQfjXo8/X0Ju4rYSJ9xG3J7ltDjyoURr0U0yWlyr6RXfyYXVOrj/ dZni714OJ/a9KGzQWNmYg0CEkelbTwf73pNCb8n0Ac9BiqIv1/rm9RuUiqu/Zp2s8EQx XozhxC5/9Z05RYEinUrW7q9aA6G43Pjq/Ad7nHIMnr1jM1fRLjCBEg6+JP0Ma1IBiniW viLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=cINbdQx9vuTQNR1x1rEsEZ4jjGMUWdf19tZ6cChgAaA=; b=S229wJ0rbYk2hXQhUm01k6v60xJkElfcwn4SHSE4I4SJB9TVJ0cN1cVPvThFo0C4N4 13n3SgLRh8AXI17y4/TTPee4KgyQmo9AS8HC4sMo45wxnBRASmnHZfN8ugYYT1SC5jT0 6xyYZHYhz4HSJzUo6tjjD2NT2vbutjE2ZV/QLRKx6kcRr8DXr4ExjGm0RHzh8VpsIuxq pNftZzWSrcoNub4E9mlBcKHQ9RZ/6UplOQxrIBZecbv5ElPtwgcxqV1omzLsz3DzATh2 49ePvhhkZ5Q28UNBUoIyWueb8mNXQmXQCDbu+uZtj/MC3HBcKkFPqDZ1aq0wCqs/piae UGhQ== X-Gm-Message-State: ACgBeo2Gt41wPm2FtUN/flKMJiOhbDK6Xk/5LEnU+cX7ZP8vXehrxNAC o1y86T9y3O/j+ZVtG+bBYBsthvWNnQNWU4ohH4Gl X-Received: by 2002:aca:b7d5:0:b0:343:c478:91c6 with SMTP id h204-20020acab7d5000000b00343c47891c6mr257896oif.136.1660686682803; Tue, 16 Aug 2022 14:51:22 -0700 (PDT) MIME-Version: 1.0 References: <20220815162028.926858-1-fred@cloudflare.com> In-Reply-To: <20220815162028.926858-1-fred@cloudflare.com> From: Paul Moore Date: Tue, 16 Aug 2022 17:51:12 -0400 Message-ID: Subject: Re: [PATCH v5 0/4] Introduce security_create_user_ns() To: Frederick Lawler Cc: kpsingh@kernel.org, revest@chromium.org, jackmanb@chromium.org, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, kafai@fb.com, songliubraving@fb.com, yhs@fb.com, john.fastabend@gmail.com, jmorris@namei.org, serge@hallyn.com, stephen.smalley.work@gmail.com, eparis@parisplace.org, shuah@kernel.org, brauner@kernel.org, casey@schaufler-ca.com, ebiederm@xmission.com, bpf@vger.kernel.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, kernel-team@cloudflare.com, cgzones@googlemail.com, karl@bigbadwolfsecurity.com, tixxdz@gmail.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Aug 15, 2022 at 12:20 PM Frederick Lawler wrote: > > While user namespaces do not make the kernel more vulnerable, they are however > used to initiate exploits. Some users do not want to block namespace creation > for the entirety of the system, which some distributions provide. Instead, we > needed a way to have some applications be blocked, and others allowed. This is > not possible with those tools. Managing hierarchies also did not fit our case > because we're determining which tasks are allowed based on their attributes. > > While exploring a solution, we first leveraged the LSM cred_prepare hook > because that is the closest hook to prevent a call to create_user_ns(). > > The calls look something like this: > > cred = prepare_creds() > security_prepare_creds() > call_int_hook(cred_prepare, ... > if (cred) > create_user_ns(cred) > > We noticed that error codes were not propagated from this hook and > introduced a patch [1] to propagate those errors. > > The discussion notes that security_prepare_creds() is not appropriate for > MAC policies, and instead the hook is meant for LSM authors to prepare > credentials for mutation. [2] > > Additionally, cred_prepare hook is not without problems. Handling the clone3 > case is a bit more tricky due to the user space pointer passed to it. This > makes checking the syscall subject to a possible TOCTTOU attack. > > Ultimately, we concluded that a better course of action is to introduce > a new security hook for LSM authors. [3] > > This patch set first introduces a new security_create_user_ns() function > and userns_create LSM hook, then marks the hook as sleepable in BPF. The > following patches after include a BPF test and a patch for an SELinux > implementation. > > We want to encourage use of user namespaces, and also cater the needs > of users/administrators to observe and/or control access. There is no > expectation of an impact on user space applications because access control > is opt-in, and users wishing to observe within a LSM context > > > Links: > 1. https://lore.kernel.org/all/20220608150942.776446-1-fred@cloudflare.com/ > 2. https://lore.kernel.org/all/87y1xzyhub.fsf@email.froward.int.ebiederm.org/ > 3. https://lore.kernel.org/all/9fe9cd9f-1ded-a179-8ded-5fde8960a586@cloudflare.com/ > > Past discussions: > V4: https://lore.kernel.org/all/20220801180146.1157914-1-fred@cloudflare.com/ > V3: https://lore.kernel.org/all/20220721172808.585539-1-fred@cloudflare.com/ > V2: https://lore.kernel.org/all/20220707223228.1940249-1-fred@cloudflare.com/ > V1: https://lore.kernel.org/all/20220621233939.993579-1-fred@cloudflare.com/ > > Changes since v4: > - Update commit description > - Update cover letter > Changes since v3: > - Explicitly set CAP_SYS_ADMIN to test namespace is created given > permission > - Simplify BPF test to use sleepable hook only > - Prefer unshare() over clone() for tests > Changes since v2: > - Rename create_user_ns hook to userns_create > - Use user_namespace as an object opposed to a generic namespace object > - s/domB_t/domA_t in commit message > Changes since v1: > - Add selftests/bpf: Add tests verifying bpf lsm create_user_ns hook patch > - Add selinux: Implement create_user_ns hook patch > - Change function signature of security_create_user_ns() to only take > struct cred > - Move security_create_user_ns() call after id mapping check in > create_user_ns() > - Update documentation to reflect changes > > Frederick Lawler (4): > security, lsm: Introduce security_create_user_ns() > bpf-lsm: Make bpf_lsm_userns_create() sleepable > selftests/bpf: Add tests verifying bpf lsm userns_create hook > selinux: Implement userns_create hook > > include/linux/lsm_hook_defs.h | 1 + > include/linux/lsm_hooks.h | 4 + > include/linux/security.h | 6 ++ > kernel/bpf/bpf_lsm.c | 1 + > kernel/user_namespace.c | 5 + > security/security.c | 5 + > security/selinux/hooks.c | 9 ++ > security/selinux/include/classmap.h | 2 + > .../selftests/bpf/prog_tests/deny_namespace.c | 102 ++++++++++++++++++ > .../selftests/bpf/progs/test_deny_namespace.c | 33 ++++++ > 10 files changed, 168 insertions(+) > create mode 100644 tools/testing/selftests/bpf/prog_tests/deny_namespace.c > create mode 100644 tools/testing/selftests/bpf/progs/test_deny_namespace.c I just merged this into the lsm/next tree, thanks for seeing this through Frederick, and thank you to everyone who took the time to review the patches and add their tags. git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/lsm.git next -- paul-moore.com