Date: Tue, 15 Oct 1996 13:37:36 -0500 (CDT) From: Karl Denninger <karl@Mcs.Net> To: nlawson@kdat.csc.calpoly.edu (Nathan Lawson) Cc: marcs@znep.com, freebsd-security@freebsd.org Subject: Re: bin/1805: Bug in ftpd Message-ID: <199610151837.NAA16749@Jupiter.Mcs.Net> In-Reply-To: <199610151553.IAA28499@kdat.calpoly.edu> from "Nathan Lawson" at Oct 15, 96 08:53:38 am
next in thread | previous in thread | raw e-mail | index | archive | help
> > > >Description: > > > While user is connected to server via ftp, the process ftpd is owned > > > by this user. When ftpd is abnormally termineted (e.g. kill -11 <ftpd-id>) > > > the memory image of this process is writed to file ftpd.core in home dir. > > > This file contain encrypted passwords all users on this machine. > > > > > > > > > >How-To-Repeat: > > > 1. ftp localhost > > > name: username > > > password: **** > > > 2. On second terminal: > > > a) ps -ax | grep localhost > > > b) kill -11 <PID> > > > c) strings ~/ftpd.core | less (you will see all encrypted passwords). > > > > + > > + /* > > + * prevent ftpd from dumping core; necessary to prevent a user > > + * from getting a core file with privileged information in > > + */ > > + rlim.rlim_cur = rlim.rlim_max = 0; > > + if (setrlimit(RLIMIT_CORE, &rlim) != 0) { > > + syslog(LOG_ERR, "setrlimit(RLIMIT_CORE, &rlim) failed"); > > + exit(1); > > + } > > + > > This isn't a fix. Remember the principle of least privilege: if something > doesn't need certain privileges, revoke them. In this case, the ftpd is > running as the user. This means that all resources of ftpd are also owned > by the user, including any inherited fds and memory. Your patch only fixes > one instance of this attack, preventing core dumps. It is trivial to get > around it by using ptrace to attach to the process and read the memory > containing the encrypted passwords. > > The real fix is to close the password file and zero any associated memory > immediately before the ftpd enters the user domain via setuid(). A user-level > program does not need any authentication data (like passwords) and thus should > not have any access to them. > > It's impossible to steal data that just isn't there. > > -- > Nate Lawson "There are a thousand hacking at the branches of > CPE Senior evil to one who is striking at the root." > CSL Admin -- Henry David Thoreau, 'Walden', 1854 Fundamentally, "endpwent()" should do this. But it does not. I suggest that the problem be patched there. That fixes *all* instances of this attack, provided that the code writers take a modicum of interest in the issue (ie: closing out open resources). -- -- Karl Denninger (karl@MCS.Net)| MCSNet - The Finest Internet Connectivity http://www.mcs.net/~karl | T1 from $600 monthly; speeds to DS-3 available | 23 Chicagoland Prefixes, 13 ISDN, much more Voice: [+1 312 803-MCS1 x219]| Email to "info@mcs.net" WWW: http://www.mcs.net/ Fax: [+1 312 248-9865] | Home of Chicago's only FULL Clarinet feed!
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199610151837.NAA16749>