Users login

Create an account »

JOIN XATRIX

Users login

Home » Hacking News » Updated: MITKRB5-SA-2002-002: Buffer overflow in kadmind4

Updated: MITKRB5-SA-2002-002: Buffer overflow in kadmind4

by Nikola Strahija on October 27th, 2002 MIT krb5 Security Advisory 2002-002 [updated] Severity: CRITICAL - Remote user can gain root access to KDC host.


SUMMARY
=======

A stack buffer overflow in the implementation of the Kerberos v4
compatibility administration daemon (kadmind4) in the MIT krb5
distribution can be exploited to gain unauthorized root access to a
KDC host. The attacker does not need to authenticate to the daemon to
successfully perform this attack. At least one exploit is known to
exist in the wild, and at least one attacker is reasonably competent
at cleaning up traces of intrusion.

The kadmind4 supplied with MIT krb5 is intended for use in sites that
require compatibility with legacy administrative clients; sites that
do not have this requirement are not likely to be running this daemon.

IMPACT
======

A remote attacker can execute arbitrary code on the KDC with the
privileges of the user running kadmind4 (usually root). This can lead
to compromise of the Kerberos database.

AFFECTED SOFTWARE
=================

* All releases of MIT Kerberos 5, up to and including krb5-1.2.6.

* All Kerberos 4 implementations derived from MIT Kerberos 4,
including Cygnus Network Security (CNS). This includes KTH Kerberos
4 (eBones). See CERT advisory CA-2002-29.

* KTH Heimdal has a similar vulnerability, if Kerberos 4 compatibility
is compiled. See CERT advisory CA-2002-29.

FIXES
=====

Apply the following patch to src/kadmin/v4server/kadm_ser_wrap.c:

Index: kadm_ser_wrap.c
===================================================================
RCS file: /cvs/krbdev/krb5/src/kadmin/v4server/kadm_ser_wrap.c,v
retrieving revision 1.10.4.1
diff -c -r1.10.4.1 kadm_ser_wrap.c
*** kadm_ser_wrap.c 2000/05/23 21:44:50 1.10.4.1
- --- kadm_ser_wrap.c 2002/10/22 22:07:11
***************
*** 170,183 ****
u_char *retdat, *tmpdat;
int retval, retlen;

! if (strncmp(KADM_VERSTR, (char *)*dat, KADM_VERSIZE)) {
errpkt(dat, dat_len, KADM_BAD_VER);
return KADM_BAD_VER;
}
in_len = KADM_VERSIZE;
/* get the length */
! if ((retc = stv_long(*dat, &r_len, in_len, *dat_len)) < 0)
return KADM_LENGTH_ERROR;
in_len += retc;
authent.length = *dat_len - r_len - KADM_VERSIZE - sizeof(krb5_ui_4);
memcpy((char *)authent.dat, (char *)(*dat) + in_len, authent.length);
- --- 170,190 ----
u_char *retdat, *tmpdat;
int retval, retlen;

! if ((*dat_len < KADM_VERSIZE + sizeof(krb5_ui_4))
! || strncmp(KADM_VERSTR, (char *)*dat, KADM_VERSIZE)) {
errpkt(dat, dat_len, KADM_BAD_VER);
return KADM_BAD_VER;
}
in_len = KADM_VERSIZE;
/* get the length */
! if ((retc = stv_long(*dat, &r_len, in_len, *dat_len)) < 0
! || (r_len > *dat_len - KADM_VERSIZE - sizeof(krb5_ui_4))
! || (*dat_len - r_len - KADM_VERSIZE -
! sizeof(krb5_ui_4) > sizeof(authent.dat))) {
! errpkt(dat, dat_len, KADM_LENGTH_ERROR);
return KADM_LENGTH_ERROR;
+ }
+
in_len += retc;
authent.length = *dat_len - r_len - KADM_VERSIZE - sizeof(krb5_ui_4);
memcpy((char *)authent.dat, (char *)(*dat) + in_len, authent.length);

The patch was generated against krb5-1.2.6; patches to other releases
may apply with some offset.

This patch may also be found at:

http://web.mit.edu/kerberos/www/advisories/2002-002-kadm4_patch.txt

The associated detached PGP signature is at:

http://web.mit.edu/kerberos/www/advisories/2002-002-kadm4_patch.txt.asc

This announcement and code patches related to it may be found on the
MIT Kerberos security advisory page at:

http://web.mit.edu/kerberos/www/advisories/index.html

The main MIT Kerberos web page is at:

http://web.mit.edu/kerberos/www/index.html

ACKNOWLEDGMENTS
===============

Thanks to Johan Danielsson and Love Hornquist-Astrand for alerting us
to this problem and providing us with an initial patch.

Thanks to Assar Westerlund for further assistance in developing the
patch.

DETAILS
=======

The function kadm_ser_in() is passed an allocated buffer (containing a
request read from the network) and its length. From this buffer, it
reads an 8-byte version string followed by a 4-byte length. This
length field is not checked; an attacker can construct a request that
will cause authent.length to become negative or to become greater than
sizeof(authent.dat). Both cases can cause the following call to
memcpy() to overflow authent.dat, which is a buffer on the stack.

A note containing descriptions of possible attack signatures is at:

http://web.mit.edu/kerberos/www/advisories/2002-002-kadm4_attacksig.txt

REVISION HISTORY
================

2002-10-22 original release
2002-10-25 added pointer to note on attack signature, KTH
eBones/Heimdal note, and pointer to CERT advisory
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (SunOS)

iQCVAwUBPbnbF6bDgE/zdoE9AQGwAwQAnmt3jbChHjsaimhlAeJQtakWZmRmevwF
M9GkzRyG4ORuWhsTA9ytyRhp9K4QMo+SePBvcNsBuqRJHVwORGu+agau96QMXXfR
BhoMlIRqWlWuCsf8wwv+t9FKTdDxrn7+j2jLi9zKB+1MtDp3ENR83C1ee3nzFBe4
kgpaxxGid0Q=
=gn6W
-----END PGP SIGNATURE-----


Newsletter signup

Signup to our monthly newsletter and stay in touch with IT news!

Free E-books

We've got ebooks! But they're not online. :( Please give us a few days to bring downloads back.

Contact

Have something to say or just wanna drop us a line? Please keep this in mind: to spam, we reply with spam.

Contact us »