From mboxrd@z Thu Jan 1 00:00:00 1970 From: ebiederm@xmission.com (Eric W. Biederman) Subject: Re: [RFC][PATCH v3] Unprivileged: Disable raising of privileges Date: Thu, 31 Dec 2009 08:48:45 -0800 Message-ID: References: <3e8340490912291954v5a837a26p64bd776102d281d7@mail.gmail.com> <3e8340490912292057g3e87eaabn115f85b78af2b08c@mail.gmail.com> <551280e50912300652r1007dee0j8de750bf33af9b3c@mail.gmail.com> <20091230183513.GC14493@us.ibm.com> <20091230201712.GA23999@us.ibm.com> <20091231152523.GA12969@us.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: "Andrew G. Morgan" , Bryan Donlan , Alan Cox , Benny Amorsen , Michael Stone , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-security-module@vger.kernel.org, Andi Kleen , David Lang , Oliver Hartkopp , Herbert Xu , Valdis Kletnieks , Evgeniy Polyakov , "C. Scott Ananian" , James Morris , Bernie Innocenti , Mark Seaborn , Randy Dunlap , =?utf-8?Q?Am=C3=A9rico?= Wang , Tetsuo Handa , Samir Bellabes , Casey Schaufler Return-path: In-Reply-To: <20091231152523.GA12969@us.ibm.com> (Serge E. Hallyn's message of "Thu\, 31 Dec 2009 09\:25\:23 -0600") Sender: linux-security-module-owner@vger.kernel.org List-Id: netdev.vger.kernel.org "Serge E. Hallyn" writes: >> diff --git a/security/commoncap.c b/security/commoncap.c >> index f800fdb..34500e3 100644 >> --- a/security/commoncap.c >> +++ b/security/commoncap.c >> @@ -389,7 +389,7 @@ static int get_file_caps(struct linux_binprm *bprm, bool *effective) >> if (!file_caps_enabled) >> return 0; >> >> - if (bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID) >> + if (bprm->nosuid) >> return 0; > > I'm sorry, this may actually not be sufficient. > > Could you try the following test on a kernel with this patch? : > > 1. become root > 2. do prctl(PR_SET_NOSUID); > 3. run bash, and examine your capabilities in /proc/self/status > > I think the code in security/commoncap.c:457-458 will re-raise your > capabilities. Right. That is a legitimate issue. I almost guard against it with my test against with my start condition test of cap_isclear(cred->cap_permitted). Which causes this to fail for root in most situations. I will add a test for the securebits, and deny this to root unless the securebits are such that root cannot gain privilege. Thanks for catching this. I figured I might need a uid == 0 exclusion. Where the test was split when I wrote it I wasn't certain where to put it. Eric