Date: 2 Feb 2001 23:28:35 -0000 From: venglin@freebsd.lublin.pl To: FreeBSD-gnats-submit@freebsd.org Subject: bin/24810: kerberosIV and heimdal ftpd is vulnerable to buffer overflow Message-ID: <20010202232835.70065.qmail@riget.scene.pl>
next in thread | raw e-mail | index | archive | help
>Number: 24810 >Category: bin >Synopsis: kerberosIV and heimdal ftpd is vulnerable to buffer overflow >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Feb 02 15:40:00 PST 2001 >Closed-Date: >Last-Modified: >Originator: Przemyslaw Frasunek >Release: FreeBSD 4.2-STABLE i386 >Organization: ISMEDIA >Environment: FreeBSD 4.2-STABLE as of 3 Feb 2001. >Description: KTH Kerberos5 and KerberosIV ftpd is vulnerable to strtok() based stack overflow. >How-To-Repeat: N/A >Fix: --- crypto/heimdal/appl/ftp/ftpd/popen.c.orig Sat Feb 3 00:20:07 2001 +++ crypto/heimdal/appl/ftp/ftpd/popen.c Sat Feb 3 00:23:10 2001 @@ -66,6 +66,9 @@ #include <roken.h> +#define MAXUSRARGS 100 +#define MAXGLOBARGS 1000 + /* * Special version of popen which avoids call to shell. This ensures * no one may create a pipe to a hidden program as a side effect of a @@ -103,7 +106,7 @@ char *cp; FILE *iop; int argc, gargc, pdes[2], pid; - char **pop, *argv[100], *gargv[1000]; + char **pop, *argv[MAXUSRARGS], *gargv[MAXGLOBARGS]; char *foo; if (strcmp(type, "r") && strcmp(type, "w")) @@ -126,14 +129,14 @@ /* break up string into pieces */ foo = NULL; - for (argc = 0, cp = program;; cp = NULL) { + for (argc = 0, cp = program; argc < MAXUSRARGS; cp = NULL) { if (!(argv[argc++] = strtok_r(cp, " \t\n", &foo))) break; } gargv[0] = (char*)ftp_rooted(argv[0]); /* glob each piece */ - for (gargc = argc = 1; argv[argc]; argc++) { + for (gargc = argc = 1; argv[argc] && gargc < (MAXGLOBARGS-1); argc++) { glob_t gl; int flags = GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE; @@ -141,7 +144,7 @@ if (no_glob || glob(argv[argc], flags, NULL, &gl)) gargv[gargc++] = strdup(argv[argc]); else - for (pop = gl.gl_pathv; *pop; pop++) + for (pop = gl.gl_pathv; *pop && gargc < (MAXGLOBARGS-1); pop++) gargv[gargc++] = strdup(*pop); globfree(&gl); } --- crypto/kerberosIV/appl/ftp/ftpd/popen.c.orig Sat Feb 3 00:26:04 2001 +++ crypto/kerberosIV/appl/ftp/ftpd/popen.c Sat Feb 3 00:24:25 2001 @@ -66,6 +66,9 @@ #include <roken.h> +#define MAXUSRARGS 100 +#define MAXGLOBARGS 1000 + /* * Special version of popen which avoids call to shell. This ensures * no one may create a pipe to a hidden program as a side effect of a @@ -103,7 +106,7 @@ char *cp; FILE *iop; int argc, gargc, pdes[2], pid; - char **pop, *argv[100], *gargv[1000]; + char **pop, *argv[MAXUSRARGS], *gargv[MAXGLOBARGS]; char *foo; if (strcmp(type, "r") && strcmp(type, "w")) @@ -126,14 +129,14 @@ /* break up string into pieces */ foo = NULL; - for (argc = 0, cp = program;; cp = NULL) { + for (argc = 0, cp = program; argc < MAXUSRARGS; cp = NULL) { if (!(argv[argc++] = strtok_r(cp, " \t\n", &foo))) break; } gargv[0] = (char*)ftp_rooted(argv[0]); /* glob each piece */ - for (gargc = argc = 1; argv[argc]; argc++) { + for (gargc = argc = 1; argv[argc] && gargc < (MAXGLOBARGS-1); argc++) { glob_t gl; int flags = GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE; @@ -141,7 +144,7 @@ if (no_glob || glob(argv[argc], flags, NULL, &gl)) gargv[gargc++] = strdup(argv[argc]); else - for (pop = gl.gl_pathv; *pop; pop++) + for (pop = gl.gl_pathv; *pop && gargc < (MAXGLOBARGS-1); pop++) gargv[gargc++] = strdup(*pop); globfree(&gl); } >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010202232835.70065.qmail>