Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Aug 2001 15:29:27 -0400
From:      Mike Barcroft <mike@FreeBSD.org>
To:        Kris Kennaway <kris@obsecurity.org>
Cc:        audit@FreeBSD.org
Subject:   Re: Checking issetugid() with getenv() in libraries
Message-ID:  <20010819152927.A49129@coffee.q9media.com>
In-Reply-To: <20010818221258.A79194@xor.obsecurity.org>; from kris@obsecurity.org on Sat, Aug 18, 2001 at 10:12:58PM -0700
References:  <20010818221258.A79194@xor.obsecurity.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Kris Kennaway <kris@obsecurity.org> writes:
> There were a number of places where library routines blindly use
> getenv() in ways which may be insecure if called from setugid code.
> Please review the following.
> 
> I also changed the uthread_info.c to respect TMPDIR if !issetugid()
> instead of dumping to /tmp always.
> 
> Kris
> 
> Index: libc/db/test/dbtest.c
> ===================================================================
> RCS file: /mnt/ncvs/src/lib/libc/db/test/dbtest.c,v
> retrieving revision 1.4
> diff -u -r1.4 dbtest.c
> --- libc/db/test/dbtest.c	2000/08/04 10:50:21	1.4
> +++ libc/db/test/dbtest.c	2001/08/19 04:25:47
> @@ -155,7 +155,8 @@
>  	 * want it around, and it often screws up tests.
>  	 */
>  	if (fname == NULL) {
> -		p = getenv("TMPDIR");
> +		if (issetugid() == 0)
> +			p = getenv("TMPDIR");
>  		if (p == NULL)
>  			p = "/var/tmp";
>  		(void)snprintf(buf, sizeof(buf), "%s/__dbtest", p);
[...]

Is p initialized to NULL above this?  If not, p could be uninitialized
when issetugid() != 0.

> Index: libc/stdio/tmpfile.c
> ===================================================================
> RCS file: /mnt/ncvs/src/lib/libc/stdio/tmpfile.c,v
> retrieving revision 1.6
> diff -u -r1.6 tmpfile.c
> --- libc/stdio/tmpfile.c	2001/07/07 04:08:32	1.6
> +++ libc/stdio/tmpfile.c	2001/08/19 04:19:53
> @@ -61,7 +61,8 @@
>  	char *buf;
>  	const char *tmpdir;
>  
> -	tmpdir = getenv("TMPDIR");
> +	if (issetugid() == 0)
> +		tmpdir = getenv("TMPDIR");
>  	if (tmpdir == NULL)
>  		tmpdir = _PATH_TMP;
>  
[...]

There's a similar problem here.

> Index: libncp/ncpl_rcfile.c
> ===================================================================
> RCS file: /mnt/ncvs/src/lib/libncp/ncpl_rcfile.c,v
> retrieving revision 1.3
> diff -u -r1.3 ncpl_rcfile.c
> --- libncp/ncpl_rcfile.c	2000/05/26 02:00:20	1.3
> +++ libncp/ncpl_rcfile.c	2001/08/19 04:52:39
> @@ -390,7 +390,8 @@
>  	char *home, *fn;
>  	int error;
>  
> -	home = getenv("HOME");
> +	if (issetugid() == 0)
> +		home = getenv("HOME");
>  	if (home) {
>  		fn = malloc(strlen(home) + 20);
>  		sprintf(fn, "%s/.nwfsrc", home);
[...]

Also here.

The rest of the changes look good.

Best regards,
Mike Barcroft

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-audit" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010819152927.A49129>