summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2023-06-20 14:21:19 +0000
committertb <>2023-06-20 14:21:19 +0000
commita7641133988eb74a1505ddbdd5ef7d3cae70b041 (patch)
treeaf8f09a18c7463edb484ca6c922932b1d98762fa /src
parent493bcd9093b2f475136974c32415a153d83e0399 (diff)
downloadopenbsd-a7641133988eb74a1505ddbdd5ef7d3cae70b041.tar.gz
openbsd-a7641133988eb74a1505ddbdd5ef7d3cae70b041.tar.bz2
openbsd-a7641133988eb74a1505ddbdd5ef7d3cae70b041.zip
Improve certificate version checks in x509v3_cache_extensions()
Only allow version v1-v3, disallow issuerUID and subjectUID in v1 certs and require that if X509v3 extensions are present that the cert be v3. Initial diff from job ok job jsing
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/x509/x509_purp.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/lib/libcrypto/x509/x509_purp.c b/src/lib/libcrypto/x509/x509_purp.c
index 85d9b77f68..75d229b03b 100644
--- a/src/lib/libcrypto/x509/x509_purp.c
+++ b/src/lib/libcrypto/x509/x509_purp.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_purp.c,v 1.25 2023/04/23 21:49:15 job Exp $ */ 1/* $OpenBSD: x509_purp.c,v 1.26 2023/06/20 14:21:19 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2001. 3 * project 2001.
4 */ 4 */
@@ -449,6 +449,7 @@ x509v3_cache_extensions_internal(X509 *x)
449 ASN1_BIT_STRING *ns; 449 ASN1_BIT_STRING *ns;
450 EXTENDED_KEY_USAGE *extusage; 450 EXTENDED_KEY_USAGE *extusage;
451 X509_EXTENSION *ex; 451 X509_EXTENSION *ex;
452 long version;
452 int i; 453 int i;
453 454
454 if (x->ex_flags & EXFLAG_SET) 455 if (x->ex_flags & EXFLAG_SET)
@@ -456,12 +457,18 @@ x509v3_cache_extensions_internal(X509 *x)
456 457
457 X509_digest(x, X509_CERT_HASH_EVP, x->hash, NULL); 458 X509_digest(x, X509_CERT_HASH_EVP, x->hash, NULL);
458 459
459 /* V1 should mean no extensions ... */ 460 version = X509_get_version(x);
460 if (X509_get_version(x) == 0) { 461 if (version < 0 || version > 2)
462 x->ex_flags |= EXFLAG_INVALID;
463 if (version == 0) {
461 x->ex_flags |= EXFLAG_V1; 464 x->ex_flags |= EXFLAG_V1;
462 if (X509_get_ext_count(x) != 0) 465 /* UIDs may only appear in v2 or v3 certs */
466 if (x->cert_info->issuerUID != NULL ||
467 x->cert_info->subjectUID != NULL)
463 x->ex_flags |= EXFLAG_INVALID; 468 x->ex_flags |= EXFLAG_INVALID;
464 } 469 }
470 if (version != 2 && X509_get_ext_count(x) != 0)
471 x->ex_flags |= EXFLAG_INVALID;
465 472
466 /* Handle basic constraints */ 473 /* Handle basic constraints */
467 if ((bs = X509_get_ext_d2i(x, NID_basic_constraints, &i, NULL))) { 474 if ((bs = X509_get_ext_d2i(x, NID_basic_constraints, &i, NULL))) {