* Thu Dec 19 2014 Roland Mainz <rmainz@redhat.com> - 1.13-4
- fix for CVE-2014-5354 (#1174546) "krb5: NULL pointer dereference when using keyless entries"
This commit is contained in:
parent
8545575f69
commit
6baee3e656
113
krb5-CVE_2014_5354_support_keyless_principals_in_LDAP.patch
Normal file
113
krb5-CVE_2014_5354_support_keyless_principals_in_LDAP.patch
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
From 04038bf3633c4b909b5ded3072dc88c8c419bf16 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ben Kaduk <kaduk@mit.edu>
|
||||||
|
Date: Wed, 19 Nov 2014 12:04:46 -0500
|
||||||
|
Subject: [PATCH] Support keyless principals in LDAP [CVE-2014-5354]
|
||||||
|
|
||||||
|
Operations like "kadmin -q 'addprinc -nokey foo'" or
|
||||||
|
"kadmin -q 'purgekeys -all foo'" result in principal entries with
|
||||||
|
no keys present, so krb5_encode_krbsecretkey() would just return
|
||||||
|
NULL, which then got unconditionally dereferenced in
|
||||||
|
krb5_add_ber_mem_ldap_mod().
|
||||||
|
|
||||||
|
Apply some fixes to krb5_encode_krbsecretkey() to handle zero-key
|
||||||
|
principals better, correct the test for an allocation failure, and
|
||||||
|
slightly restructure the cleanup handler to be shorter and more
|
||||||
|
appropriate for the usage. Once it no longer short-circuits when
|
||||||
|
n_key_data is zero, it will produce an array of length two with both
|
||||||
|
entries NULL, which is treated as an empty list by the LDAP library,
|
||||||
|
the correct behavior for a keyless principal.
|
||||||
|
|
||||||
|
However, attributes with empty values are only handled by the LDAP
|
||||||
|
library for Modify operations, not Add operations (which only get
|
||||||
|
a sequence of Attribute, with no operation field). Therefore, only
|
||||||
|
add an empty krbprincipalkey to the modlist when we will be performing a
|
||||||
|
Modify, and not when we will be performing an Add, which is conditional
|
||||||
|
on the (misspelled) create_standalone_prinicipal boolean.
|
||||||
|
|
||||||
|
CVE-2014-5354:
|
||||||
|
|
||||||
|
In MIT krb5, when kadmind is configured to use LDAP for the KDC
|
||||||
|
database, an authenticated remote attacker can cause a NULL
|
||||||
|
dereference by inserting into the database a principal entry which
|
||||||
|
contains no long-term keys.
|
||||||
|
|
||||||
|
In order for the LDAP KDC backend to translate a principal entry
|
||||||
|
from the database abstraction layer into the form expected by the
|
||||||
|
LDAP schema, the principal's keys are encoded into a
|
||||||
|
NULL-terminated array of length-value entries to be stored in the
|
||||||
|
LDAP database. However, the subroutine which produced this array
|
||||||
|
did not correctly handle the case where no keys were present,
|
||||||
|
returning NULL instead of an empty array, and the array was
|
||||||
|
unconditionally dereferenced while adding to the list of LDAP
|
||||||
|
operations to perform.
|
||||||
|
|
||||||
|
Versions of MIT krb5 prior to 1.12 did not expose a way for
|
||||||
|
principal entries to have no long-term key material, and
|
||||||
|
therefore are not vulnerable.
|
||||||
|
|
||||||
|
CVSSv2 Vector: AV:N/AC:M/Au:S/C:N/I:N/A:P/E:H/RL:OF/RC:C
|
||||||
|
|
||||||
|
ticket: 8041 (new)
|
||||||
|
tags: pullup
|
||||||
|
target_version: 1.13.1
|
||||||
|
subject: kadmind with ldap backend crashes when putting keyless entries
|
||||||
|
---
|
||||||
|
src/plugins/kdb/ldap/libkdb_ldap/ldap_principal2.c | 25 +++++++++++++++-------
|
||||||
|
1 file changed, 17 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal2.c b/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal2.c
|
||||||
|
index 3e560d9..10b5982 100644
|
||||||
|
--- a/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal2.c
|
||||||
|
+++ b/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal2.c
|
||||||
|
@@ -406,14 +406,14 @@ krb5_encode_krbsecretkey(krb5_key_data *key_data_in, int n_key_data,
|
||||||
|
int num_versions = 1;
|
||||||
|
int i, j, last;
|
||||||
|
krb5_error_code err = 0;
|
||||||
|
- krb5_key_data *key_data;
|
||||||
|
+ krb5_key_data *key_data = NULL;
|
||||||
|
|
||||||
|
- if (n_key_data <= 0)
|
||||||
|
+ if (n_key_data < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* Make a shallow copy of the key data so we can alter it. */
|
||||||
|
key_data = k5calloc(n_key_data, sizeof(*key_data), &err);
|
||||||
|
- if (key_data_in == NULL)
|
||||||
|
+ if (key_data == NULL)
|
||||||
|
goto cleanup;
|
||||||
|
memcpy(key_data, key_data_in, n_key_data * sizeof(*key_data));
|
||||||
|
|
||||||
|
@@ -467,9 +467,8 @@ krb5_encode_krbsecretkey(krb5_key_data *key_data_in, int n_key_data,
|
||||||
|
free(key_data);
|
||||||
|
if (err != 0) {
|
||||||
|
if (ret != NULL) {
|
||||||
|
- for (i = 0; i <= num_versions; i++)
|
||||||
|
- if (ret[i] != NULL)
|
||||||
|
- free (ret[i]);
|
||||||
|
+ for (i = 0; ret[i] != NULL; i++)
|
||||||
|
+ free (ret[i]);
|
||||||
|
free (ret);
|
||||||
|
ret = NULL;
|
||||||
|
}
|
||||||
|
@@ -1036,9 +1035,19 @@ krb5_ldap_put_principal(krb5_context context, krb5_db_entry *entry,
|
||||||
|
bersecretkey = krb5_encode_krbsecretkey (entry->key_data,
|
||||||
|
entry->n_key_data, mkvno);
|
||||||
|
|
||||||
|
- if ((st=krb5_add_ber_mem_ldap_mod(&mods, "krbprincipalkey",
|
||||||
|
- LDAP_MOD_REPLACE | LDAP_MOD_BVALUES, bersecretkey)) != 0)
|
||||||
|
+ if (bersecretkey == NULL) {
|
||||||
|
+ st = ENOMEM;
|
||||||
|
goto cleanup;
|
||||||
|
+ }
|
||||||
|
+ /* An empty list of bervals is only accepted for modify operations,
|
||||||
|
+ * not add operations. */
|
||||||
|
+ if (bersecretkey[0] != NULL || !create_standalone_prinicipal) {
|
||||||
|
+ st = krb5_add_ber_mem_ldap_mod(&mods, "krbprincipalkey",
|
||||||
|
+ LDAP_MOD_REPLACE | LDAP_MOD_BVALUES,
|
||||||
|
+ bersecretkey);
|
||||||
|
+ if (st != 0)
|
||||||
|
+ goto cleanup;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (!(entry->mask & KADM5_PRINCIPAL)) {
|
||||||
|
memset(strval, 0, sizeof(strval));
|
@ -43,7 +43,7 @@
|
|||||||
Summary: The Kerberos network authentication system
|
Summary: The Kerberos network authentication system
|
||||||
Name: krb5
|
Name: krb5
|
||||||
Version: 1.13
|
Version: 1.13
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
# - Maybe we should explode from the now-available-to-everybody tarball instead?
|
# - Maybe we should explode from the now-available-to-everybody tarball instead?
|
||||||
# http://web.mit.edu/kerberos/dist/krb5/1.13/krb5-1.13-signed.tar
|
# http://web.mit.edu/kerberos/dist/krb5/1.13/krb5-1.13-signed.tar
|
||||||
# - The sources below are stored in a lookaside cache. Upload with
|
# - The sources below are stored in a lookaside cache. Upload with
|
||||||
@ -95,6 +95,7 @@ Patch129: krb5-1.11-run_user_0.patch
|
|||||||
Patch134: krb5-1.11-kpasswdtest.patch
|
Patch134: krb5-1.11-kpasswdtest.patch
|
||||||
Patch136: krb5-socket_wrapper_eventfd_prototype_mismatch.patch
|
Patch136: krb5-socket_wrapper_eventfd_prototype_mismatch.patch
|
||||||
Patch137: krb5-CVE_2014_5353_fix_LDAP_misused_policy_name_crash.patch
|
Patch137: krb5-CVE_2014_5353_fix_LDAP_misused_policy_name_crash.patch
|
||||||
|
Patch138: krb5-CVE_2014_5354_support_keyless_principals_in_LDAP.patch
|
||||||
|
|
||||||
License: MIT
|
License: MIT
|
||||||
URL: http://web.mit.edu/kerberos/www/
|
URL: http://web.mit.edu/kerberos/www/
|
||||||
@ -317,6 +318,7 @@ ln NOTICE LICENSE
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%patch137 -p1
|
%patch137 -p1
|
||||||
|
%patch138 -p1
|
||||||
|
|
||||||
# Take the execute bit off of documentation.
|
# Take the execute bit off of documentation.
|
||||||
chmod -x doc/krb5-protocol/*.txt doc/ccapi/*.html
|
chmod -x doc/krb5-protocol/*.txt doc/ccapi/*.html
|
||||||
@ -988,6 +990,10 @@ exit 0
|
|||||||
%{_sbindir}/uuserver
|
%{_sbindir}/uuserver
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Dec 19 2014 Roland Mainz <rmainz@redhat.com> - 1.13-4
|
||||||
|
- fix for CVE-2014-5354 (#1174546) "krb5: NULL pointer
|
||||||
|
dereference when using keyless entries"
|
||||||
|
|
||||||
* Wed Dec 17 2014 Roland Mainz <rmainz@redhat.com> - 1.13-3
|
* Wed Dec 17 2014 Roland Mainz <rmainz@redhat.com> - 1.13-3
|
||||||
- fix for CVE-2014-5353 (#1174543) "Fix LDAP misused policy
|
- fix for CVE-2014-5353 (#1174543) "Fix LDAP misused policy
|
||||||
name crash"
|
name crash"
|
||||||
|
Loading…
Reference in New Issue
Block a user