Date: Sun, 13 Oct 2002 14:43:06 -0400 (EDT) From: Chris BeHanna <behanna@zbzoom.net> To: FreeBSD Security <security@freebsd.org> Subject: Re: access() is a security hole? Message-ID: <20021013143844.W86274-100000@topperwein.pennasoft.com> In-Reply-To: <m3k7koud6v.fsf@mordack.codesourcery.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 11 Oct 2002, Ricardo Anguiano wrote:
> Benjamin Krueger <benjamin@seattlefenix.net> writes:
>
> > * Ricardo Anguiano (anguiano@codesourcery.com) [021011 09:39]:
> > > Chris BeHanna <behanna@zbzoom.net> writes:
> > >
> > > > On Fri, 11 Oct 2002, Bruce Evans wrote:
> > > > > Setuid programs should only use access() to check whether they will
> > > > > have permission after they set[ug]id() to the real [ug]id. Non-setuid
> > > > > programs mostly don't need such checks. They can just try the operation.
> > > >
> > > > Perhaps the way to avoid the race is to open the file, lock it,
> > > > and *then* call access(), then close the file or proceed based upon
> > > > the result.
> > >
> > > What's wrong with opening the file, then using fstat to check the
> > > properties of the file associated with the file descriptor?
If you're worried about the kinds of races to which access(2) is
vulnerable, then you *MUST* lock the file to prevent another process
from modifying it, and that lock must be mandatory. open() and
fstat() do not close the hole. You need open() with a mandatory lock,
then fstat(), then, if the uid/gid has permission, do with the lock
whatever the program logic requires, or else close the file, dropping
the lock implicitly.
> > And if you don't have sufficient permission to open the file?
>
> IMHO, then there was no point in making the access(2) call. The
> problem exists when the process is running with elevated privileges.
>
> AFAIK, open(2) does not fail due to permission problems when run as
> root. Thus, the need to check for the invoking user's permission to
> open the file.
Correct. In the case that the process has no permission to open
the file, the setuid/gid program merely closes it immediately.
> PS: Chris: postmaster@telstraclear.co.nz says you don't exist.
Then it's misconfigured, as I quite clearly do. Perhaps it was a
transient DNS problem.
--
Chris BeHanna http://www.pennasoft.com
Principal Consultant
PennaSoft Corporation
chris@pennasoft.com
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-security" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021013143844.W86274-100000>
