Date: Mon, 16 Dec 1996 06:51:33 -0700 (MST) From: Marc Slemko <marcs@znep.com> To: Dmitry Valdov <dv@kis.ru> Cc: freebsd-bugs@freebsd.org, freebsd-security@freebsd.org Subject: Re: crontab security hole Message-ID: <Pine.BSF.3.95.961216064624.7792B-100000@alive.ampr.ab.ca> In-Reply-To: <Pine.FBSD.3.95.961216110312.12040B-100000@xkis.kis.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 16 Dec 1996, Dmitry Valdov wrote: > Hello! > > Are there any fixes for crontab? I've exploit which allow any user to become > root using crontab security hole. > > Dmitry. > It was fixed in -stable the other day by pst. The patch, pulled from the CVS tree, follows. Index: cron/database.c =================================================================== RCS file: /usr/cvs/src/usr.sbin/cron/cron/database.c,v retrieving revision 1.1.1.1 retrieving revision 1.1.1.1.6.1 diff -c -r1.1.1.1 -r1.1.1.1.6.1 *** database.c 1994/08/27 13:43:03 1.1.1.1 --- database.c 1996/12/15 20:37:47 1.1.1.1.6.1 *************** *** 112,119 **** if (dp->d_name[0] == '.') continue; ! (void) strcpy(fname, dp->d_name); ! sprintf(tabname, CRON_TAB(fname)); process_crontab(fname, fname, tabname, &statbuf, &new_db, old_db); --- 112,119 ---- if (dp->d_name[0] == '.') continue; ! (void)snprintf(fname, sizeof fname, "%s", dp->d_name); ! (void)snprintf(tabname, sizeof tabname, CRON_TAB(fname)); process_crontab(fname, fname, tabname, &statbuf, &new_db, old_db); Index: crontab/crontab.c =================================================================== RCS file: /usr/cvs/src/usr.sbin/cron/crontab/crontab.c,v retrieving revision 1.3.4.1 retrieving revision 1.3.4.2 diff -c -r1.3.4.1 -r1.3.4.2 *** crontab.c 1996/04/09 21:23:11 1.3.4.1 --- crontab.c 1996/12/15 20:37:59 1.3.4.2 *************** *** 17,23 **** *************** *** 167,173 **** ProgramName, optarg); exit(ERROR_EXIT); } ! (void) strcpy(User, optarg); break; case 'l': if (Option != opt_unknown) --- 167,173 ---- ProgramName, optarg); exit(ERROR_EXIT); } ! (void) snprintf(User, sizeof(user), "%s", optarg); break; case 'l': if (Option != opt_unknown) *************** *** 198,204 **** } else { if (argv[optind] != NULL) { Option = opt_replace; ! (void) strcpy (Filename, argv[optind]); } else { usage("file name must be specified for replace"); } --- 198,205 ---- } else { if (argv[optind] != NULL) { Option = opt_replace; ! (void) snprintf(Filename, sizeof(Filename), "%s", ! argv[optind]); } else { usage("file name must be specified for replace"); } *************** *** 480,486 **** ProgramName, Filename); goto done; default: ! fprintf(stderr, "%s: panic: bad switch() in replace_cmd()\n"); goto fatal; } remove: --- 481,488 ---- ProgramName, Filename); goto done; default: ! fprintf(stderr, "%s: panic: bad switch() in replace_cmd()\n", ! ProgramName); goto fatal; } remove:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.95.961216064624.7792B-100000>