summaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-connectivity
diff options
context:
space:
mode:
authorWenzong Fan <wenzong.fan@windriver.com>2015-11-14 05:22:29 -0500
committerMartin Jansa <Martin.Jansa@gmail.com>2015-12-18 12:28:24 +0100
commitf4ed56d0d4962a78491d7c4fbe72ad0a6fe7fe6c (patch)
treec3154180589837cd437c90314303da9c593783e7 /meta-oe/recipes-connectivity
parentc533d4506eb983daf7884ba41bb910c0b1133a3d (diff)
downloadmeta-openembedded-f4ed56d0d4962a78491d7c4fbe72ad0a6fe7fe6c.tar.gz
krb5: fix CVE-2015-2698
The iakerb_gss_export_sec_context function in lib/gssapi/krb5/iakerb.c in MIT Kerberos 5 (aka krb5) 1.14 pre-release 2015-09-14 improperly accesses a certain pointer, which allows remote authenticated users to cause a denial of service (memory corruption) or possibly have unspecified other impact by interacting with an application that calls the gss_export_sec_context function. NOTE: this vulnerability exists because of an incorrect fix for CVE-2015-2696. Backport upstream commit to fix it: https://github.com/krb5/krb5/commit/3db8dfec1ef50ddd78d6ba9503185995876a39fd Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com> Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Diffstat (limited to 'meta-oe/recipes-connectivity')
-rw-r--r--meta-oe/recipes-connectivity/krb5/krb5/Fix-IAKERB-context-export-import-CVE-2015-2698.patch134
-rw-r--r--meta-oe/recipes-connectivity/krb5/krb5_1.13.2.bb1
2 files changed, 135 insertions, 0 deletions
diff --git a/meta-oe/recipes-connectivity/krb5/krb5/Fix-IAKERB-context-export-import-CVE-2015-2698.patch b/meta-oe/recipes-connectivity/krb5/krb5/Fix-IAKERB-context-export-import-CVE-2015-2698.patch
new file mode 100644
index 000000000..2f45d306b
--- /dev/null
+++ b/meta-oe/recipes-connectivity/krb5/krb5/Fix-IAKERB-context-export-import-CVE-2015-2698.patch
@@ -0,0 +1,134 @@
1From aa769c8c6905d1abfac66d4d1b0fc73740ccbe7d Mon Sep 17 00:00:00 2001
2From: Greg Hudson <ghudson@mit.edu>
3Date: Sat, 14 Nov 2015 02:47:04 -0500
4Subject: [PATCH 4/4] Fix IAKERB context export/import [CVE-2015-2698]
5
6The patches for CVE-2015-2696 contained a regression in the newly
7added IAKERB iakerb_gss_export_sec_context() function, which could
8cause it to corrupt memory. Fix the regression by properly
9dereferencing the context_handle pointer before casting it.
10
11Also, the patches did not implement an IAKERB gss_import_sec_context()
12function, under the erroneous belief that an exported IAKERB context
13would be tagged as a krb5 context. Implement it now to allow IAKERB
14contexts to be successfully exported and imported after establishment.
15
16CVE-2015-2698:
17
18In any MIT krb5 release with the patches for CVE-2015-2696 applied, an
19application which calls gss_export_sec_context() may experience memory
20corruption if the context was established using the IAKERB mechanism.
21Historically, some vulnerabilities of this nature can be translated
22into remote code execution, though the necessary exploits must be
23tailored to the individual application and are usually quite
24complicated.
25
26 CVSSv2 Vector: AV:N/AC:H/Au:S/C:C/I:C/A:C/E:POC/RL:OF/RC:C
27
28ticket: 8273 (new)
29target_version: 1.14
30tags: pullup
31
32Backport upstream commit:
33https://github.com/krb5/krb5/commit/3db8dfec1ef50ddd78d6ba9503185995876a39fd
34
35Upstream-Status: Backport
36---
37 src/lib/gssapi/krb5/gssapiP_krb5.h | 5 +++++
38 src/lib/gssapi/krb5/gssapi_krb5.c | 2 +-
39 src/lib/gssapi/krb5/iakerb.c | 42 +++++++++++++++++++++++++++++++-------
40 3 files changed, 41 insertions(+), 8 deletions(-)
41
42diff --git a/src/lib/gssapi/krb5/gssapiP_krb5.h b/src/lib/gssapi/krb5/gssapiP_krb5.h
43index 05dc321..ac53662 100644
44--- a/src/lib/gssapi/krb5/gssapiP_krb5.h
45+++ b/src/lib/gssapi/krb5/gssapiP_krb5.h
46@@ -1396,6 +1396,11 @@ OM_uint32 KRB5_CALLCONV
47 iakerb_gss_export_sec_context(OM_uint32 *minor_status,
48 gss_ctx_id_t *context_handle,
49 gss_buffer_t interprocess_token);
50+
51+OM_uint32 KRB5_CALLCONV
52+iakerb_gss_import_sec_context(OM_uint32 *minor_status,
53+ const gss_buffer_t interprocess_token,
54+ gss_ctx_id_t *context_handle);
55 #endif /* LEAN_CLIENT */
56
57 OM_uint32 KRB5_CALLCONV
58diff --git a/src/lib/gssapi/krb5/gssapi_krb5.c b/src/lib/gssapi/krb5/gssapi_krb5.c
59index 9a23656..d7ba279 100644
60--- a/src/lib/gssapi/krb5/gssapi_krb5.c
61+++ b/src/lib/gssapi/krb5/gssapi_krb5.c
62@@ -945,7 +945,7 @@ static struct gss_config iakerb_mechanism = {
63 NULL,
64 #else
65 iakerb_gss_export_sec_context,
66- NULL,
67+ iakerb_gss_import_sec_context,
68 #endif
69 krb5_gss_inquire_cred_by_mech,
70 krb5_gss_inquire_names_for_mech,
71diff --git a/src/lib/gssapi/krb5/iakerb.c b/src/lib/gssapi/krb5/iakerb.c
72index 4662bd9..48beaee 100644
73--- a/src/lib/gssapi/krb5/iakerb.c
74+++ b/src/lib/gssapi/krb5/iakerb.c
75@@ -1061,7 +1061,7 @@ iakerb_gss_export_sec_context(OM_uint32 *minor_status,
76 gss_buffer_t interprocess_token)
77 {
78 OM_uint32 maj;
79- iakerb_ctx_id_t ctx = (iakerb_ctx_id_t)context_handle;
80+ iakerb_ctx_id_t ctx = (iakerb_ctx_id_t)*context_handle;
81
82 /* We don't currently support exporting partially established contexts. */
83 if (!ctx->established)
84@@ -1076,13 +1076,41 @@ iakerb_gss_export_sec_context(OM_uint32 *minor_status,
85 return maj;
86 }
87
88-/*
89- * Until we implement partial context exports, there are no SPNEGO exported
90- * context tokens, only tokens for the underlying krb5 context. So we do not
91- * need to implement an iakerb_gss_import_sec_context() yet; it would be
92- * unreachable except via a manually constructed token.
93- */
94+OM_uint32 KRB5_CALLCONV
95+iakerb_gss_import_sec_context(OM_uint32 *minor_status,
96+ gss_buffer_t interprocess_token,
97+ gss_ctx_id_t *context_handle)
98+{
99+ OM_uint32 maj, tmpmin;
100+ krb5_error_code code;
101+ gss_ctx_id_t gssc;
102+ krb5_gss_ctx_id_t kctx;
103+ iakerb_ctx_id_t ctx;
104+
105+ maj = krb5_gss_import_sec_context(minor_status, interprocess_token, &gssc);
106+ if (maj != GSS_S_COMPLETE)
107+ return maj;
108+ kctx = (krb5_gss_ctx_id_t)gssc;
109+
110+ if (!kctx->established) {
111+ /* We don't currently support importing partially established
112+ * contexts. */
113+ krb5_gss_delete_sec_context(&tmpmin, &gssc, GSS_C_NO_BUFFER);
114+ return GSS_S_FAILURE;
115+ }
116
117+ code = iakerb_alloc_context(&ctx, kctx->initiate);
118+ if (code != 0) {
119+ krb5_gss_delete_sec_context(&tmpmin, &gssc, GSS_C_NO_BUFFER);
120+ *minor_status = code;
121+ return GSS_S_FAILURE;
122+ }
123+
124+ ctx->gssc = gssc;
125+ ctx->established = 1;
126+ *context_handle = (gss_ctx_id_t)ctx;
127+ return GSS_S_COMPLETE;
128+}
129 #endif /* LEAN_CLIENT */
130
131 OM_uint32 KRB5_CALLCONV
132--
1331.9.1
134
diff --git a/meta-oe/recipes-connectivity/krb5/krb5_1.13.2.bb b/meta-oe/recipes-connectivity/krb5/krb5_1.13.2.bb
index c6b873a3a..ecb4edac2 100644
--- a/meta-oe/recipes-connectivity/krb5/krb5_1.13.2.bb
+++ b/meta-oe/recipes-connectivity/krb5/krb5_1.13.2.bb
@@ -26,6 +26,7 @@ SRC_URI = "http://web.mit.edu/kerberos/dist/${BPN}/${SHRT_VER}/${BP}-signed.tar
26 file://Fix-SPNEGO-context-aliasing-bugs-CVE-2015-2695.patch;striplevel=2 \ 26 file://Fix-SPNEGO-context-aliasing-bugs-CVE-2015-2695.patch;striplevel=2 \
27 file://Fix-IAKERB-context-aliasing-bugs-CVE-2015-2696.patch;striplevel=2 \ 27 file://Fix-IAKERB-context-aliasing-bugs-CVE-2015-2696.patch;striplevel=2 \
28 file://Fix-build_principal-memory-bug-CVE-2015-2697.patch;striplevel=2 \ 28 file://Fix-build_principal-memory-bug-CVE-2015-2697.patch;striplevel=2 \
29 file://Fix-IAKERB-context-export-import-CVE-2015-2698.patch;striplevel=2 \
29 file://crosscompile_nm.patch \ 30 file://crosscompile_nm.patch \
30 file://etc/init.d/krb5-kdc \ 31 file://etc/init.d/krb5-kdc \
31 file://etc/init.d/krb5-admin-server \ 32 file://etc/init.d/krb5-admin-server \