All of lore.kernel.org
 help / color / mirror / Atom feed
From: Karl MacMillan <kmacmillan@mentalrootkit.com>
To: Joshua Brindle <method@manicmethod.com>
Cc: Joshua Brindle <method@gentoo.org>,
	russell@coker.com.au, Klaus Weidner <klaus@atsec.com>,
	selinux@tycho.nsa.gov, Stephan Mueller <smueller@atsec.com>
Subject: Re: type transitioning script race condition?
Date: Thu, 31 Aug 2006 11:29:24 -0400	[thread overview]
Message-ID: <1157038164.14623.6.camel@localhost.localdomain> (raw)
In-Reply-To: <1157032383.24429.90.camel@twoface.columbia.tresys.com>

On Thu, 2006-08-31 at 09:53 -0400, Joshua Brindle wrote:
> On Thu, 2006-08-31 at 09:23 -0400, Karl MacMillan wrote:
> > On Wed, 2006-08-30 at 23:12 -0400, Joshua Brindle wrote:
> > > Russell Coker wrote:
> > > 
> > > >On Thursday 31 August 2006 08:39, Klaus Weidner <klaus@atsec.com> wrote:
> > > >  
> > > >
> > > >>This sounds as if it suffers from the well known race condition that
> > > >>makes setuid shell scripts a bad idea - is there any protection in place
> > > >>to prevent users from exploiting the race condition to run code of their
> > > >>own choice in the new domain?
> > > >>    
> > > >>
> > > >
> > > >Correct.  As long as the script is run in a domain that has less privileges 
> > > >than the calling code this isn't a problem.  If running a script causes a 
> > > >transition to a more privileged domain then that's a policy bug.
> > > >
> > > >  
> > > >
> > > this happens quite a bit, including our own selinux management script 
> > > semanage. In addition to the race condition (that is not fixable on 
> > > Linux AFAIK) there are other environmental contamination issues,
> > > 
> > > There are some plans to fix the environmental contamination issues using 
> > > a wrapper that cleanses the environment ala atsecure but the race is not 
> > > fixable as far as I know.
> > > 
> > 
> > If you write a C program that wrapper both issues should be greatly
> > mitigated because you are no longer gaining privilege on the script
> > execution - see
> > http://svn.python.org/view/python/trunk/Misc/setuid-prog.c?rev=11583&view=auto. I've been meaning to do this for semanage for a while but haven't gotten to it yet.
> 
> I think we need to consolidate efforts because we are starting to work
> on a wrapper here as well. 
> 
> The one you referenced is specific to python but I'd like something more
> general, basically what I'm envisioning is a wrapper that you symlink
> all your interpreters to:
> 
> /usr/bin/perl -> /usr/lib/wrapper/envcleaner (or whatever)
> same with python, php, etc
> 
> and when the wrapper is run it looks at how it was run argv[0] and
> checks a config file, something like:
> 
> /usr/bin/python:
> (from the above link)
> bad_vars: LD_* _RLD* PYTHON IFS CDPATH ENV
> 
> or whatever, something generic that we can use to protect any kind of
> interpreted script, it could check for uid changes as well as do an
> atsecure check to decide if it needs to cleanse the environment.
> 

I think this general solution is going to be a hard sell because of
compatibility problems. So I think it is best to go in two directions -
a practical per-application solution and the more complete and general
solution.

> One thing, you said both issues can be mitigated, how can the race be
> mitigated? The app executes the interpreter with the argv you pass into
> it so the race to swap the file still exists (and the privilege has
> already been raised via the wrapper)
> 

Sorry - started one message and sent another. If you embed the script
(as a string) and interpreter in the C wrapper you can avoid the race.

In practice - for the scripts we are discussing - if you have sufficient
privilege to modify the script or the environment to take advantage of
the race condition you likely have a more direct attack vector. So the
environment cleansing seems more important to me.

Karl



--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.

  reply	other threads:[~2006-08-31 15:29 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-30 22:39 type transitioning script race condition? Klaus Weidner
2006-08-30 23:18 ` Russell Coker
2006-08-31  3:12   ` Joshua Brindle
2006-08-31 13:23     ` Karl MacMillan
2006-08-31 13:53       ` Joshua Brindle
2006-08-31 15:29         ` Karl MacMillan [this message]
2006-08-31 15:41           ` Joshua Brindle
2006-08-31 16:02           ` Klaus Weidner
2006-08-31 16:39             ` Karl MacMillan
2006-08-31 17:19               ` Klaus Weidner
2006-08-31 20:02                 ` Karl MacMillan
2006-08-31 15:46         ` Klaus Weidner
2006-08-31 16:13           ` Joshua Brindle
2006-08-31 16:40             ` Klaus Weidner
2006-09-01 11:37           ` Stephen Smalley
2006-09-01 12:48         ` Russell Coker
2006-09-01 13:13           ` Joshua Brindle
2006-08-31 14:43     ` Stephen Smalley
2006-08-31 14:49       ` Joshua Brindle
2006-08-31 15:09         ` Stephen Smalley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1157038164.14623.6.camel@localhost.localdomain \
    --to=kmacmillan@mentalrootkit.com \
    --cc=klaus@atsec.com \
    --cc=method@gentoo.org \
    --cc=method@manicmethod.com \
    --cc=russell@coker.com.au \
    --cc=selinux@tycho.nsa.gov \
    --cc=smueller@atsec.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.