Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936539AbcKQRMp (ORCPT ); Thu, 17 Nov 2016 12:12:45 -0500 Received: from out03.mta.xmission.com ([166.70.13.233]:59672 "EHLO out03.mta.xmission.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935602AbcKQRMk (ORCPT ); Thu, 17 Nov 2016 12:12:40 -0500 From: ebiederm@xmission.com (Eric W. Biederman) To: Linux Containers Cc: Oleg Nesterov , "linux-kernel\@vger.kernel.org" , "linux-mm\@kvack.org" , Linux FS Devel , Michal Hocko , Jann Horn , Willy Tarreau , Kees Cook , Andy Lutomirski References: <87twcbq696.fsf@x220.int.ebiederm.org> <20161018135031.GB13117@dhcp22.suse.cz> <8737jt903u.fsf@xmission.com> <20161018150507.GP14666@pc.thejh.net> <87twc9656s.fsf@xmission.com> <20161018191206.GA1210@laptop.thejh.net> <87r37dnz74.fsf@xmission.com> <87k2d5nytz.fsf_-_@xmission.com> <87y41kjn6l.fsf@xmission.com> <20161019172917.GE1210@laptop.thejh.net> <87pomwi5p2.fsf@xmission.com> <87pomwghda.fsf@xmission.com> <87twb6avk8.fsf_-_@xmission.com> Date: Thu, 17 Nov 2016 11:08:22 -0600 In-Reply-To: <87twb6avk8.fsf_-_@xmission.com> (Eric W. Biederman's message of "Thu, 17 Nov 2016 11:02:47 -0600") Message-ID: <87inrmavax.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=1c7QDh-0002j7-7X;;;mid=<87inrmavax.fsf_-_@xmission.com>;;;hst=in01.mta.xmission.com;;;ip=75.170.125.99;;;frm=ebiederm@xmission.com;;;spf=neutral X-XM-AID: U2FsdGVkX1+OuxbdBVMPlLToBmG0Qzehkik0E0ws/jo= X-SA-Exim-Connect-IP: 75.170.125.99 X-SA-Exim-Mail-From: ebiederm@xmission.com X-Spam-Report: * -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP * 0.0 TVD_RCVD_IP Message was received from an IP address * 1.5 XMNoVowels Alpha-numberic number with no vowels * 0.7 XMSubLong Long Subject * 1.5 TR_Symld_Words too many words that have symbols inside * 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.5000] * -0.0 DCC_CHECK_NEGATIVE Not listed in DCC * [sa06 1397; Body=1 Fuz1=1 Fuz2=1] * 0.0 T_TooManySym_01 4+ unique symbols in subject X-Spam-DCC: XMission; sa06 1397; Body=1 Fuz1=1 Fuz2=1 X-Spam-Combo: ***;Linux Containers X-Spam-Relay-Country: X-Spam-Timing: total 15030 ms - load_scoreonly_sql: 0.03 (0.0%), signal_user_changed: 7 (0.0%), b_tie_ro: 6 (0.0%), parse: 0.82 (0.0%), extract_message_metadata: 13 (0.1%), get_uri_detail_list: 1.29 (0.0%), tests_pri_-1000: 3.2 (0.0%), tests_pri_-950: 1.16 (0.0%), tests_pri_-900: 0.99 (0.0%), tests_pri_-400: 23 (0.2%), check_bayes: 22 (0.1%), b_tokenize: 7 (0.0%), b_tok_get_all: 8 (0.1%), b_comp_prob: 1.72 (0.0%), b_tok_touch_all: 3.3 (0.0%), b_finish: 0.67 (0.0%), tests_pri_0: 205 (1.4%), check_dkim_signature: 0.48 (0.0%), check_dkim_adsp: 6 (0.0%), tests_pri_500: 14773 (98.3%), poll_dns_idle: 14762 (98.2%), rewrite_mail: 0.00 (0.0%) Subject: [REVIEW][PATCH 2/3] exec: Don't allow ptracing an exec of an unreadable file 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: 1663 Lines: 53 It is the reasonable expectation that if an executable file is not readable there will be no way for a user without special privileges to read the file. This is enforced in ptrace_attach but if we are already attached there is no enforcement if a readonly executable is exec'd. Therefore do the simple thing and if there is a non-dumpable executable that we are tracing without privilege fail to exec it. Fixes: v1.0 Cc: stable@vger.kernel.org Reported-by: Andy Lutomirski Signed-off-by: "Eric W. Biederman" --- fs/exec.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/exec.c b/fs/exec.c index fdec760bfac3..de107f74e055 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1230,6 +1230,11 @@ int flush_old_exec(struct linux_binprm * bprm) { int retval; + /* Fail if the tracer can't read the executable */ + if ((bprm->interp_flags & BINPRM_FLAGS_ENFORCE_NONDUMP) && + !ptracer_capable(current, bprm->mm->user_ns)) + return -EPERM; + /* * Make sure we have a private signal table and that * we are unassociated from the previous thread group. @@ -1301,7 +1306,6 @@ void setup_new_exec(struct linux_binprm * bprm) !gid_eq(bprm->cred->gid, current_egid())) { current->pdeath_signal = 0; } else { - would_dump(bprm, bprm->file); if (bprm->interp_flags & BINPRM_FLAGS_ENFORCE_NONDUMP) set_dumpable(current->mm, suid_dumpable); } @@ -1736,6 +1740,8 @@ static int do_execveat_common(int fd, struct filename *filename, if (retval < 0) goto out; + would_dump(bprm, bprm->file); + retval = exec_binprm(bprm); if (retval < 0) goto out; -- 2.10.1