diff options
| author | Tom Yu <tlyu@mit.edu> | 2010-02-16 22:10:17 +0000 |
|---|---|---|
| committer | Tom Yu <tlyu@mit.edu> | 2010-02-16 22:10:17 +0000 |
| commit | aef4a62723bc1e4cdcdb15c130729d3e130426fd (patch) | |
| tree | f76f4f833d390ef9e955261231dd6151f23c60f7 /src | |
| parent | 373a23547c7c256b6eaf71713706dd847c826f2b (diff) | |
| download | krb5-aef4a62723bc1e4cdcdb15c130729d3e130426fd.tar.gz krb5-aef4a62723bc1e4cdcdb15c130729d3e130426fd.tar.xz krb5-aef4a62723bc1e4cdcdb15c130729d3e130426fd.zip | |
MITKRB5-SA-2010-001 CVE-2010-0283 KDC denial of service
Code introduced in krb5-1.7 can cause an assertion failure if a
KDC-REQ is internally inconsistent, specifically if the ASN.1 tag
doesn't match the msg_type field. Thanks to Emmanuel Bouillon (NATO
C3 Agency) for discovering and reporting this vulnerability.
ticket: 6662
tags: pullup
target_version: 1.8
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@23724 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
| -rw-r--r-- | src/kdc/do_as_req.c | 5 | ||||
| -rw-r--r-- | src/kdc/do_tgs_req.c | 2 | ||||
| -rw-r--r-- | src/kdc/fast_util.c | 2 |
3 files changed, 8 insertions, 1 deletions
diff --git a/src/kdc/do_as_req.c b/src/kdc/do_as_req.c index b183dcfc7b..39242979aa 100644 --- a/src/kdc/do_as_req.c +++ b/src/kdc/do_as_req.c @@ -139,6 +139,11 @@ process_as_req(krb5_kdc_req *request, krb5_data *req_pkt, session_key.contents = 0; enc_tkt_reply.authorization_data = NULL; + if (request->msg_type != KRB5_AS_REQ) { + status = "msg_type mismatch"; + errcode = KRB5_BADMSGTYPE; + goto errout; + } errcode = kdc_make_rstate(&state); if (errcode != 0) { status = "constructing state"; diff --git a/src/kdc/do_tgs_req.c b/src/kdc/do_tgs_req.c index cb0496f9da..44b5791bc1 100644 --- a/src/kdc/do_tgs_req.c +++ b/src/kdc/do_tgs_req.c @@ -143,6 +143,8 @@ process_tgs_req(krb5_data *pkt, const krb5_fulladdr *from, retval = decode_krb5_tgs_req(pkt, &request); if (retval) return retval; + if (request->msg_type != KRB5_TGS_REQ) + return KRB5_BADMSGTYPE; /* * setup_server_realm() sets up the global realm-specific data pointer. diff --git a/src/kdc/fast_util.c b/src/kdc/fast_util.c index 06b1e2bc7a..e411e320d4 100644 --- a/src/kdc/fast_util.c +++ b/src/kdc/fast_util.c @@ -384,7 +384,7 @@ kdc_fast_handle_error(krb5_context context, krb5_data *encoded_e_data = NULL; memset(outer_pa, 0, sizeof(outer_pa)); - if (!state->armor_key) + if (!state || !state->armor_key) return 0; fx_error = *err; fx_error.e_data.data = NULL; |
