Date: Sun, 17 Nov 1996 12:58:53 +0100 From: roberto@keltia.freenix.fr (Ollivier Robert) To: freebsd-security@FreeBSD.org, freebsd-hackers@FreeBSD.org Subject: Re: New sendmail bug... Message-ID: <Mutt.19961117125853.roberto@keltia.freenix.fr> In-Reply-To: <Pine.NEB.3.95.961116235637.13141B-100000@quagmire.ki.net>; from Marc G. Fournier on Nov 16, 1996 23:57:40 -0500 References: <Pine.LNX.3.92.961116165903.12931A-100000@super-g.inch.com> <Pine.NEB.3.95.961116235637.13141B-100000@quagmire.ki.net>
next in thread | previous in thread | raw e-mail | index | archive | help
According to Marc G. Fournier: > Please send details on 'sploit...would like to test on my Solaris > 2.5.1 box as well... The bug is fixed in FreeBSD 2.2, 2.1.6 and 3.0-CURRENT. Here is Allman's fix that has been committed: From: Eric Allman <eric@sendmail.org> Subject: Re: [leshka@leshka.chuvashia.su: BoS: Exploit for sendmail smtpd bug (ver. 8.7-8.8.2).] Date: Sat, 16 Nov 1996 07:15:08 -0800 Maybe I just haven't had enough coffee yet -- I can't reproduce the problem (on BSD/OS 2.0.1). Perhaps it is because I already have a daemon running -- I just get "problem creating SMTP socket" logged a few times. It wouldn't have worked for me anyhow; I disallow setuid binaries on my /tmp filesystem (always a good idea!). However, I believe that _other_ people can reproduce this, and that's good enough. I'm going to take a couple of precautions (patch enclosed). I would appreciate it if as many as possible of you can give me the "before and after" info on this, just to make sure I've patched it successfully. As I say, since I can't reproduce it, I'm kind of stuck for a verification. Many thanks for forwarding this. eric ------- main.c ------- *** - Wed Dec 31 16:00:00 1969 --- main.c Sat Nov 16 07:07:17 1996 *************** *** 493,507 **** { case MD_DAEMON: case MD_FGDAEMON: ! # ifdef DAEMON ! if (RealUid != 0) ! { ! usrerr("Permission denied"); ! exit(EX_USAGE); ! } ! vendor_daemon_setup(CurEnv); ! /* fall through ... */ ! # else usrerr("Daemon mode not implemented"); ExitStat = EX_USAGE; break; --- 493,499 ---- { case MD_DAEMON: case MD_FGDAEMON: ! # ifndef DAEMON usrerr("Daemon mode not implemented"); ExitStat = EX_USAGE; break; *************** *** 899,904 **** --- 891,904 ---- /* fall through ... */ case MD_DAEMON: + /* check for permissions */ + if (RealUid != 0) + { + usrerr("Permission denied"); + exit(EX_USAGE); + } + vendor_daemon_setup(CurEnv); + /* remove things that don't make sense in daemon mode */ FullName = NULL; GrabTo = FALSE; *************** *** 1932,1937 **** --- 1932,1946 ---- syslog(LOG_INFO, "restarting %s on signal", SaveArgv[0]); #endif releasesignal(SIGHUP); + if (setuid(RealUid) < 0 || setgid(RealGid) < 0) + { + #ifdef LOG + if (LogLevel > 0) + syslog(LOG_ALERT, "could not set[ug]id(%d, %d): %m", + RealUid, RealGid); + #endif + exit(EX_OSERR); + } execv(SaveArgv[0], (ARGV_T) SaveArgv); #ifdef LOG if (LogLevel > 0) -- Ollivier ROBERT -=- The daemon is FREE! -=- roberto@keltia.freenix.fr FreeBSD keltia.freenix.fr 3.0-CURRENT #28: Sun Nov 10 13:37:41 MET 1996
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Mutt.19961117125853.roberto>