Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751440AbdH3Rlu (ORCPT ); Wed, 30 Aug 2017 13:41:50 -0400 Received: from out03.mta.xmission.com ([166.70.13.233]:39851 "EHLO out03.mta.xmission.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750995AbdH3Rls (ORCPT ); Wed, 30 Aug 2017 13:41:48 -0400 From: ebiederm@xmission.com (Eric W. Biederman) To: Prakash Sangappa Cc: David Miller , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, drepper@redhat.com References: <1503965540-30393-1-git-send-email-prakash.sangappa@oracle.com> <20170829.160232.1901318933754673000.davem@davemloft.net> <87ziahzzhx.fsf@xmission.com> Date: Wed, 30 Aug 2017 12:41:21 -0500 In-Reply-To: (Prakash Sangappa's message of "Wed, 30 Aug 2017 08:57:08 -0700") Message-ID: <87inh5ymv2.fsf@xmission.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-XM-SPF: eid=1dn6zj-0007zk-FP;;;mid=<87inh5ymv2.fsf@xmission.com>;;;hst=in01.mta.xmission.com;;;ip=67.3.200.44;;;frm=ebiederm@xmission.com;;;spf=neutral X-XM-AID: U2FsdGVkX1+TlkZNyn+6WIrA1z+nGDsM0hGn6o66mUI= X-SA-Exim-Connect-IP: 67.3.200.44 X-SA-Exim-Mail-From: ebiederm@xmission.com X-Spam-Report: * -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP * 0.7 XMSubLong Long Subject * 0.0 TVD_RCVD_IP Message was received from an IP address * 0.0 T_TM2_M_HEADER_IN_MSG BODY: No description available. * 0.8 BAYES_50 BODY: Bayes spam probability is 40 to 60% * [score: 0.4839] * -0.0 DCC_CHECK_NEGATIVE Not listed in DCC * [sa06 1397; Body=1 Fuz1=1 Fuz2=1] * 0.1 XMSolicitRefs_0 Weightloss drug X-Spam-DCC: XMission; sa06 1397; Body=1 Fuz1=1 Fuz2=1 X-Spam-Combo: ;Prakash Sangappa X-Spam-Relay-Country: X-Spam-Timing: total 5682 ms - load_scoreonly_sql: 0.03 (0.0%), signal_user_changed: 2.5 (0.0%), b_tie_ro: 1.73 (0.0%), parse: 0.83 (0.0%), extract_message_metadata: 15 (0.3%), get_uri_detail_list: 2.6 (0.0%), tests_pri_-1000: 7 (0.1%), tests_pri_-950: 1.18 (0.0%), tests_pri_-900: 0.97 (0.0%), tests_pri_-400: 28 (0.5%), check_bayes: 27 (0.5%), b_tokenize: 8 (0.1%), b_tok_get_all: 10 (0.2%), b_comp_prob: 3.1 (0.1%), b_tok_touch_all: 3.0 (0.1%), b_finish: 0.61 (0.0%), tests_pri_0: 338 (5.9%), check_dkim_signature: 0.51 (0.0%), check_dkim_adsp: 2.5 (0.0%), tests_pri_500: 5285 (93.0%), poll_dns_idle: 5279 (92.9%), rewrite_mail: 0.00 (0.0%) Subject: Re: [RESEND PATCH] Allow passing tid or pid in SCM_CREDENTIALS without CAP_SYS_ADMIN X-Spam-Flag: No X-SA-Exim-Version: 4.2.1 (built Thu, 05 May 2016 13:38:54 -0600) X-SA-Exim-Scanned: Yes (on in01.mta.xmission.com) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4047 Lines: 95 Prakash Sangappa writes: > On 8/29/17 5:10 PM, ebiederm@xmission.com wrote: > > "prakash.sangappa" writes: > > On 08/29/2017 04:02 PM, David Miller wrote: > > From: Prakash Sangappa > Date: Mon, 28 Aug 2017 17:12:20 -0700 > > Currently passing tid(gettid(2)) of a thread in struct ucred in > SCM_CREDENTIALS message requires CAP_SYS_ADMIN capability otherwise > it fails with EPERM error. Some applications deal with thread id > of a thread(tid) and so it would help to allow tid in SCM_CREDENTIALS > message. Basically, either tgid(pid of the process) or the tid of > the thread should be allowed without the need for CAP_SYS_ADMIN capability. > > SCM_CREDENTIALS will be used to determine the global id of a process or > a thread running inside a pid namespace. > > This patch adds necessary check to accept tid in SCM_CREDENTIALS > struct ucred. > > Signed-off-by: Prakash Sangappa > > I'm pretty sure that by the descriptions in previous changes to this > function, what you are proposing is basically a minor form of PID > spoofing which we only want someone with CAP_SYS_ADMIN over the > PID namespace to be able to do. > > The fix is to allow passing tid of the calling thread itself not of any > other thread or process. Curious why would this be considered > as pid spoofing? > > This change would enable a thread in a multi threaded process, running > inside a pid namespace to be identified by the recipient of the > message easily. > > I think a more practical problem is that change, changes what is being > passed in the SCM_CREDENTIALS from a pid of a process to a tid of a > thread. That could be confusing and that confusion could be exploited. > > It will be upto the application to decide what to pass, either pid of the > process or tid of the thread and the co-operating process receiving the > message would know what to expect. It does not change or make it > mandatory to pass tid. > > > It is definitely confusing because in some instances a value can be both > a tgid and a tid. > > > I definitely think this needs to be talked about in terms of changing > what is passed in that field and what the consequences could be. > > Agreed that If the receiving process expects a pid and the process sending > the message sends tid, it can cause confusion, but why would that occur? > Shouldn't the sending process know what is the receiving process expecting? > > > I suspect you are ok. As nothing allows passing a tid today. But I > don't see any analysis on why passing a tid instead of a tgid will not > confuse the receiving application, and in such confusion introduce a > security hole. > > It would seem that there has to be an understanding between the two > processes what is being passed(pid or tid) when communicating with > each other. Which is the issue. SCM_CREDENTIALS is fundamentally about dealing with processes that are in a less than completely trusting relationship. > With regards to security, the question basically is what is the consequence > of passing the wrong id. As I understand it, Interpreting the id to be pid > or tid, the effective uid and gid will be the same. It would be a problem > only if the incorrect interpretation of the id would refer a different process. > But that cannot happen as the the global tid(gettid() of a thread is > unique. There is also the issue that the receiving process could look, not see the pid in proc and assume the sending process is dead. That I suspect is the larger danger. > As long as the thread is alive, that id cannot reference another process / thread. > Unless the thread were to exit and the id gets recycled and got used for another > thread or process. This would be no different from a process exiting and its > pid getting recycled which is the case now. Largely I agree. If all you want are pid translations I suspect the are far easier ways thant updating the SCM_CREDENTIALS code. Eric