From: Klaus Weidner <klaus@atsec.com>
To: Joshua Brindle <method@manicmethod.com>
Cc: Karl MacMillan <kmacmillan@mentalrootkit.com>,
Joshua Brindle <method@gentoo.org>,
russell@coker.com.au, selinux@tycho.nsa.gov,
Stephan Mueller <smueller@atsec.com>
Subject: Re: type transitioning script race condition?
Date: Thu, 31 Aug 2006 10:46:35 -0500 [thread overview]
Message-ID: <20060831154635.GC12307@w-m-p.com> (raw)
In-Reply-To: <1157032383.24429.90.camel@twoface.columbia.tresys.com>
On Thu, Aug 31, 2006 at 09:53:03AM -0400, Joshua Brindle wrote:
> On Thu, 2006-08-31 at 09:23 -0400, Karl MacMillan wrote:
> > 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.
>
> 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 is the wrong way around - it doesn't protect against the
race, and a perl or pythin script can easily clean its own environment
and doesn't need a helper program to do that.
The traditional method is to create an executable file that launches a
specific script, and make that executable suid, type transitioning or
whatever. This takes care of some issues such as LD_* variables
automatically.
The python wrapper Karl linked to does part of the job, but if you're
paranoid there are more things you need to protect against:
- other environment variables may be dangerous, for example program "foo"
launched indirectly from the script may look at a FOORC variable to
find its config file. In general it's safer to completely wipe the
environment and only retain specific variables from a whitelist.
- set up file descriptors - close extra ones, and make sure 0/1/2 are
open. A nasty hack is closing fd 2 (stderr) before launching the
trusted app. The application opens a file for writing, gets fd 2 from
the OS from that, and now anything it's intending to write to stderr
such as warning or progress messages will also go to that file.
- make sure that resource limits are reasonable. Another hack involved
setting the max file size to a very low value and calling passwd(1),
which then truncated /etc/shadow due to the limit.
These things should be done for all suid/privileged programs, not just
scripts, because they may be using system(3) or equivalent to call a
program via the shell which could then get contaminated by $IFS or other
malicious settings.
-Klaus
--
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.
next prev parent reply other threads:[~2006-08-31 15:47 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
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 [this message]
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=20060831154635.GC12307@w-m-p.com \
--to=klaus@atsec.com \
--cc=kmacmillan@mentalrootkit.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.