Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Nov 2011 17:16:39 -0800
From:      Xin LI <delphij@delphij.net>
To:        Mike Tancsa <mike@sentex.net>
Cc:        "freebsd-security@freebsd.org" <freebsd-security@freebsd.org>, d@delphij.net, Przemyslaw Frasunek <przemyslaw@frasunek.com>
Subject:   Re: ftpd security issue ?
Message-ID:  <4ED6D577.9010007@delphij.net>
In-Reply-To: <4ED6D1CD.9080700@sentex.net>
References:  <4ED68B4D.4020004@sentex.net> <4ED69B7E.50505@frasunek.com> <4ED6C3C6.5030402@delphij.net> <4ED6D1CD.9080700@sentex.net>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------050602040905040808070901
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

On 11/30/11 17:01, Mike Tancsa wrote:
> On 11/30/2011 7:01 PM, Xin LI wrote:
>> 
>>> BTW. This vulnerability affects only configurations, where 
>>> /etc/ftpchroot exists or anonymous user is allowed to create
>>> files inside etc and lib dirs.
>> 
>> This doesn't seem to be typical configuration or no?
> 
> I think in shared hosting environments it would be somewhat common.
> For annon ftp, I dont think the anon user would be able to create /
> write to a lib directory.
> 
>> 
>> Will the attached patch fix the problem?
>> 
>> (I think libc should just refuse /etc/nsswitch.conf and libraries
>> if they are writable by others by the way)
> 
> It does not seem to prevent the issue for me.  Using Przemyslaw
> program's,

Sorry I patched at the wrong place, this one should do.

Note however this is not sufficient to fix the problem, for instance
one can still upload .so's that run arbitrary code at his privilege,
which has to be addressed in libc.  I need some time to play around
with libc to really fix this one.

Cheers,
- -- 
Xin LI <delphij@delphij.net>	https://www.delphij.net/
FreeBSD - The Power to Serve!		Live free or die
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.18 (FreeBSD)

iQEcBAEBCAAGBQJO1tV2AAoJEATO+BI/yjfBua8IAIt5FYjnMswOL/GPwcEaJaAJ
reZxS5a1jBtqMOO1RhAlvDK9SVTYhWVOwQLUWmJz7iln+NissW9fQeYyG6bmfRxX
l583Aiobk1Lgp+HRJQIEj2JjajoZkj7RjUrYa4a8lZQxNmVUXE/RqRgM2/FbuU4C
ejQd5xRQdG+kMq9vUmYk4QP7ql32uv48sSTwklau6Jz5zMpXSvvx2awe8aZImB2R
pWklWcT4VUSiEbrREvP/ZNJt+BjQAZw3V2Lc0j7c9AbLnj84KRgmUS+dTMTdPoyD
nRavZQzppvxRf3tVrth5FuSsIdR5491Sa3ykzFpNKToqY4CtkRvAofZfBx0mQws=
=9B6u
-----END PGP SIGNATURE-----

--------------050602040905040808070901
Content-Type: text/plain;
 name="popen.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="popen.diff"

Index: libexec/ftpd/popen.c
===================================================================
--- libexec/ftpd/popen.c	(revision 228164)
+++ libexec/ftpd/popen.c	(working copy)
@@ -143,6 +143,9 @@
 			}
 			(void)close(pdes[1]);
 		}
+		/* Drop privileges before proceeding */
+		if (getuid() != geteuid() && setuid(geteuid()) < 0)
+			_exit(1);
 		if (strcmp(gargv[0], _PATH_LS) == 0) {
 			/* Reset getopt for ls_main() */
 			optreset = optind = optopt = 1;

--------------050602040905040808070901--



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