Apply by doing:
cd /usr/src
patch -p0 < 026_kerberos.patch
And then rebuild and install the Kerberos 5 KDC:
cd kerberosV/lib/roken
make obj
make cleandir
make depend
make
cd ../../libexec/kdc
make obj
make cleandir
make depend
make
make install
Index: kerberosV/src/kdc/524.c
===================================================================
RCS file: /cvs/src/kerberosV/src/kdc/524.c,v
retrieving revision 1.1.1.3
retrieving revision 1.1.1.3.2.1
diff -u -r1.1.1.3 -r1.1.1.3.2.1
--- kerberosV/src/kdc/524.c 6 Feb 2002 08:54:50 -0000 1.1.1.3
+++ kerberosV/src/kdc/524.c 22 Mar 2003 06:57:21 -0000 1.1.1.3.2.1
@@ -251,6 +251,14 @@
free_EncTicketPart(&et);
goto out;
}
+ if (!enable_v4_cross_realm && strcmp (et.crealm, t->realm) != 0) {
+ kdc_log(0, "524 cross-realm %s -> %s disabled", et.crealm,
+ t->realm);
+ free_EncTicketPart(&et);
+ ret = KRB5KDC_ERR_POLICY;
+ goto out;
+ }
+
ret = encode_v4_ticket(buf + sizeof(buf) - 1, sizeof(buf),
&et, &t->sname, &len);
free_EncTicketPart(&et);
Index: kerberosV/src/kdc/config.c
===================================================================
RCS file: /cvs/src/kerberosV/src/kdc/config.c,v
retrieving revision 1.1.1.3
retrieving revision 1.1.1.3.2.1
diff -u -r1.1.1.3 -r1.1.1.3.2.1
--- kerberosV/src/kdc/config.c 6 Feb 2002 08:54:50 -0000 1.1.1.3
+++ kerberosV/src/kdc/config.c 22 Mar 2003 06:57:21 -0000 1.1.1.3.2.1
@@ -67,6 +67,7 @@
char *v4_realm;
int enable_v4 = -1;
int enable_524 = -1;
+int enable_v4_cross_realm = -1;
int enable_kaserver = -1;
#endif
@@ -100,6 +101,10 @@
{ "524", 0, arg_negative_flag, &enable_524,
"don't respond to 524 requests"
},
+ { "kerberos4-cross-realm", 0, arg_flag,
+ &enable_v4_cross_realm,
+ "respond to kerberos 4 requests from foreign realms"
+ },
{
"v4-realm", 'r', arg_string, &v4_realm,
"realm to serve v4-requests for"
@@ -301,6 +306,12 @@
if(enable_v4 == -1)
enable_v4 = krb5_config_get_bool_default(context, cf, TRUE, "kdc",
"enable-kerberos4", NULL);
+ if(enable_v4_cross_realm == -1)
+ enable_v4_cross_realm =
+ krb5_config_get_bool_default(context, NULL,
+ FALSE, "kdc",
+ "enable-kerberos4-cross-realm",
+ NULL);
if(enable_524 == -1)
enable_524 = krb5_config_get_bool_default(context, cf, enable_v4,
"kdc", "enable-524", NULL);
@@ -325,8 +336,11 @@
"kdc",
"v4-realm",
NULL);
- if(p)
+ if(p != NULL) {
v4_realm = strdup(p);
+ if (v4_realm == NULL)
+ krb5_errx(context, 1, "out of memory");
+ }
}
if (enable_kaserver == -1)
enable_kaserver = krb5_config_get_bool_default(context, cf, FALSE,
@@ -355,6 +369,8 @@
#ifdef KRB4
if(v4_realm == NULL){
v4_realm = malloc(40); /* REALM_SZ */
+ if (v4_realm == NULL)
+ krb5_errx(context, 1, "out of memory");
krb_get_lrealm(v4_realm, 1);
}
#endif
Index: kerberosV/src/kdc/kdc.8
===================================================================
RCS file: /cvs/src/kerberosV/src/kdc/kdc.8,v
retrieving revision 1.2
retrieving revision 1.2.4.1
diff -u -r1.2 -r1.2.4.1
--- kerberosV/src/kdc/kdc.8 25 Jun 2001 04:43:37 -0000 1.2
+++ kerberosV/src/kdc/kdc.8 22 Mar 2003 06:57:21 -0000 1.2.4.1
@@ -1,4 +1,4 @@
-.\" $KTH: kdc.8,v 1.13 2001/06/08 21:35:32 joda Exp $
+.\" $Id: kdc.8,v 1.2.4.1 2003/03/22 06:57:21 miod Exp $
.\"
.Dd July 27, 1997
.Dt KDC 8
@@ -19,6 +19,7 @@
.Fl -v4-realm= Ns Ar string
.Xc
.Oc
+.Op Fl -kerberos4-cross-realm
.Op Fl K | Fl -no-kaserver
.Op Fl r Ar realm
.Op Fl -v4-realm= Ns Ar realm
@@ -56,6 +57,12 @@
.Xc
Gives an upper limit on the size of the requests that the kdc is
willing to handle.
+.It Xo
+.Fl -kerberos4-cross-realm
+.Xc
+respond to kerberos 4 requests from foreign realms.
+This is a known security hole and should not be enabled unless you
+understand the consequences and are willing to live with them.
.It Xo
.Fl H Ns ,
.Fl -enable-http
Index: kerberosV/src/kdc/kdc_locl.h
===================================================================
RCS file: /cvs/src/kerberosV/src/kdc/kdc_locl.h,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- kerberosV/src/kdc/kdc_locl.h 6 Feb 2002 09:10:02 -0000 1.3
+++ kerberosV/src/kdc/kdc_locl.h 22 Mar 2003 06:57:21 -0000 1.3.2.1
@@ -67,6 +67,7 @@
extern char *v4_realm;
extern int enable_v4;
extern int enable_524;
+extern int enable_v4_cross_realm;
extern krb5_boolean enable_kaserver;
#endif
Index: kerberosV/src/kdc/kerberos4.c
===================================================================
RCS file: /cvs/src/kerberosV/src/kdc/kerberos4.c,v
retrieving revision 1.1.1.2
retrieving revision 1.1.1.2.2.1
diff -u -r1.1.1.2 -r1.1.1.2.2.1
--- kerberosV/src/kdc/kerberos4.c 6 Feb 2002 08:54:52 -0000 1.1.1.2
+++ kerberosV/src/kdc/kerberos4.c 22 Mar 2003 06:57:21 -0000 1.1.1.2.2.1
@@ -430,6 +430,13 @@
goto out2;
}
+ if (!enable_v4_cross_realm && strcmp(realm, v4_realm) != 0) {
+ kdc_log(0, "krb4 Cross-realm %s -> %s disabled", realm, v4_realm);
+ make_err_reply(reply, KERB_ERR_PRINCIPAL_UNKNOWN,
+ "Can't hop realms");
+ goto out2;
+ }
+
if(strcmp(sname, "changepw") == 0){
kdc_log(0, "Bad request for changepw ticket");
make_err_reply(reply, KERB_ERR_PRINCIPAL_UNKNOWN,