summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2015-06-24 15:55:36 +0100
committerMatt Caswell <matt@openssl.org>2015-07-07 22:50:04 +0100
commit9a0db453ba017ebcaccbee933ee6511a9ae4d1c8 (patch)
treedb727a66703b31d7b67d99d4e38c02aea4387f5c
parentcb6e0ed17a61ae3711d385f517d61be2b4c33a55 (diff)
Fix alternate chains certificate forgery issue
During certificate verfification, OpenSSL will attempt to find an alternative certificate chain if the first attempt to build such a chain fails. An error in the implementation of this logic can mean that an attacker could cause certain checks on untrusted certificates to be bypassed, such as the CA flag, enabling them to use a valid leaf certificate to act as a CA and "issue" an invalid certificate. This occurs where at least one cert is added to the first chain from the trust store, but that chain still ends up being untrusted. In that case ctx->last_untrusted is decremented in error. Patch provided by the BoringSSL project. CVE-2015-1793 Reviewed-by: Stephen Henson <steve@openssl.org>
-rw-r--r--crypto/x509/x509_vfy.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/crypto/x509/x509_vfy.c b/crypto/x509/x509_vfy.c
index 16db4c025a..a0083b552d 100644
--- a/crypto/x509/x509_vfy.c
+++ b/crypto/x509/x509_vfy.c
@@ -328,8 +328,8 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
xtmp = sk_X509_pop(ctx->chain);
X509_free(xtmp);
num--;
- ctx->last_untrusted--;
}
+ ctx->last_untrusted = sk_X509_num(ctx->chain);
retry = 1;
break;
}