diff options
author | benno <> | 2021-08-20 19:54:59 +0000 |
---|---|---|
committer | benno <> | 2021-08-20 19:54:59 +0000 |
commit | 579643e8e2c726a7d57fe62581d5fcf83031e14b (patch) | |
tree | 2f693cb6da8a14eae228769fb2112ccbe8c77514 | |
parent | 9e45f26fc10e9cd2a9cd404406ffcf6ecc8e839f (diff) | |
download | openbsd-579643e8e2c726a7d57fe62581d5fcf83031e14b.tar.gz openbsd-579643e8e2c726a7d57fe62581d5fcf83031e14b.tar.bz2 openbsd-579643e8e2c726a7d57fe62581d5fcf83031e14b.zip |
In LibreSSL, printing a certificate can result in a crash inlibressl-v3.3.4
X509_CERT_AUX_print().
Commit in -current:
CVSROOT: /cvs
Module name: src
Changes by: schwarze@cvs.openbsd.org 2021/07/10 11:45:16
Modified files:
lib/libcrypto/asn1: t_x509a.c
Log message:
Fix a read buffer overrun in X509_CERT_AUX_print(3),
which by implication also affects X509_print(3).
The ASN1_STRING_get0_data(3) manual explitely cautions the reader
that the data is not necessarily NUL-terminated, and the function
X509_alias_set1(3) does not sanitize the data passed into it in
any way either, so we must assume the alias->data field is merely
a byte array and not necessarily a string in the sense of the C
language.
I found this bug while writing manual pages for these functions.
OK tb@
As an aside, note that the function still produces incomplete and
misleading results when the data contains a NUL byte in the middle
and that error handling is consistently absent throughout, even
though the function provides an "int" return value obviously intended
to be 1 for success and 0 for failure, and even though this function
is called by another function that also wants to return 1 for success
and 0 for failure and even does so in many of its code paths, though
not in others. But let's stay focussed. Many things would be nice
to have in the wide wild world, but a buffer overflow must not be
allowed to remain in our backyard.
This is patches/6.9/common/015_x509.patch.sig
-rw-r--r-- | src/lib/libcrypto/asn1/t_x509a.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lib/libcrypto/asn1/t_x509a.c b/src/lib/libcrypto/asn1/t_x509a.c index fd68211b84..1fa030ea07 100644 --- a/src/lib/libcrypto/asn1/t_x509a.c +++ b/src/lib/libcrypto/asn1/t_x509a.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t_x509a.c,v 1.8 2014/07/11 08:44:47 jsing Exp $ */ | 1 | /* $OpenBSD: t_x509a.c,v 1.8.16.1 2021/08/20 19:54:59 benno 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 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -105,8 +105,8 @@ X509_CERT_AUX_print(BIO *out, X509_CERT_AUX *aux, int indent) | |||
105 | } else | 105 | } else |
106 | BIO_printf(out, "%*sNo Rejected Uses.\n", indent, ""); | 106 | BIO_printf(out, "%*sNo Rejected Uses.\n", indent, ""); |
107 | if (aux->alias) | 107 | if (aux->alias) |
108 | BIO_printf(out, "%*sAlias: %s\n", indent, "", | 108 | BIO_printf(out, "%*sAlias: %.*s\n", indent, "", |
109 | aux->alias->data); | 109 | aux->alias->length, aux->alias->data); |
110 | if (aux->keyid) { | 110 | if (aux->keyid) { |
111 | BIO_printf(out, "%*sKey Id: ", indent, ""); | 111 | BIO_printf(out, "%*sKey Id: ", indent, ""); |
112 | for (i = 0; i < aux->keyid->length; i++) | 112 | for (i = 0; i < aux->keyid->length; i++) |