Fix alt chains bug
authorMatt Caswell <matt@openssl.org>
Tue, 23 Jun 2015 23:12:38 +0000 (00:12 +0100)
committerMatt Caswell <matt@openssl.org>
Tue, 7 Jul 2015 21:57:36 +0000 (22:57 +0100)
This is a follow up to the alternate chains certificate forgery issue
(CVE-2015-1793). That issue is exacerbated in 1.0.1 by a related bug which
means that we *always* check for an alternative chain, even if we have
already found a chain. The code is supposed to stop as soon as it has found
one (and does do in master and 1.0.2).

Reviewed-by: Stephen Henson <steve@openssl.org>
crypto/x509/verify_extra_test.c
crypto/x509/x509_vfy.c

index 08509f0131945264b81c8d00b365b68719744057..a1e41f2822bd44f9f38aec9db55365d1e02c3516 100644 (file)
@@ -168,7 +168,8 @@ static int test_alt_chains_cert_forgery(void)
 
     i = X509_verify_cert(sctx);
 
-    if(i == 0 && X509_STORE_CTX_get_error(sctx) == X509_V_ERR_INVALID_CA) {
+    if(i == 0 && X509_STORE_CTX_get_error(sctx)
+                 == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT) {
         /* This is the result we were expecting: Test passed */
         ret = 1;
     }
index 2e4c54b8161c0cd0e7d657a01abed695d92ae5b8..7009ae63076e39f8b22cb88d1bc7560f6de67331 100644 (file)
@@ -312,7 +312,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
          * if the user hasn't switched off alternate chain checking
          */
         retry = 0;
-        if (j == ctx->last_untrusted &&
+        if (num == ctx->last_untrusted &&
             !(ctx->param->flags & X509_V_FLAG_NO_ALT_CHAINS)) {
             while (j-- > 1) {
                 xtmp2 = sk_X509_value(ctx->chain, j - 1);