On 2/9/22 12:11, Theo Buehler wrote:
On Wed, Feb 09, 2022 at 09:17:26AM +0100, Volker Schlecht wrote:
Environment: -current, snapshot downloaded Feb 8th 2022
Architecture: amd64

The following command crashes

# openssl req -key <mykeyfile>  -config <myconf> -new -x509 -days 365
-sha256 -extensions v3_ca -out <mycertfile>
openssl(59343) in free(): chunk is already free 0xa32e41b9310
Abort trap

Could you please provide full commands and a config file that lead to
this crash? We have scripts to create ca certs in our regress tests and
they do not crash like that, so this must be something specific to what
you have in there.

Here's a ca.conf.test that breaks:

---------
[ ca ]
default_ca  = CA_default

[ CA_default ]
copy_extensions = copy

dir   = .
certs   = $dir/certs
crl_dir   = $dir/crl
database  = $dir/index.txt
new_certs_dir = $dir/newcerts

certificate = $dir/testca.cert.pem
serial    = $dir/serial
crlnumber = $dir/crlnumber
crl   = $dir/crl.pem
private_key = $dir/private/ca.key.pem

default_days  = 365
default_crl_days= 30
default_md  = sha256
preserve  = no

policy    = policy_match

[ policy_match ]
countryName   = match
stateOrProvinceName = match
organizationName  = match
organizationalUnitName  = optional
commonName    = supplied
emailAddress    = optional

[ crl_ext ]
authorityKeyIdentifier=keyid:always


[ req ]
x509_extensions = v3_ca
distinguished_name = req_distinguished_name
prompt = no
[ req_distinguished_name ]
countryName                     = DE
stateOrProvinceName             = BY
localityName                    = Ursa Major
0.organizationName              = Sirius Inc.
organizationalUnitName          = Testing Dept.
commonName                      = Test Root CA
emailAddress                    = t...@example.com
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints=critical,CA:true, pathlen:0
keyUsage=critical,keyCertSign,cRLSign
nameConstraints=critical,@nc
[ nc ]
permitted;DNS.0=home.lan
permitted;DNS.1=home-guest.lan
permitted;IP.0=10.0.0.0/255.0.0.0

[ server_crt ]
basicConstraints=CA:FALSE
nsCertType      = server
nsComment     = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth

----------

Full command:

# openssl req -config ca.conf.test -new -x509 -extensions v3_ca -out testca.cert.pem


If use this repeatedly, I *sometimes* get

Error Loading extension section v3_ca
9259351224992:error:22FFF076:X509 V3 routines:func(4095):reason(118):/usr/src/lib/libcrypto/x509/x509_alt.c:679:name=IP len=8 9259351224992:error:22FFF080:X509 V3 routines:func(4095):reason(128):/usr/src/lib/libcrypto/x509/x509_conf.c:102:name=nameConstraints, value=@nc
openssl(98518) in free(): chunk is already free 0x86b241c3f40
Abort trap

But *mostly* it's just

openssl(9323) in free(): chunk is already free 0x3cb3a6a9780
Abort trap

The issue seems to be actually with the line

permitted;IP.0=10.0.0.0/255.0.0.0

Not sure if that's illegal, too, but at least according to

https://www.feistyduck.com/library/openssl-cookbook/online/ch-openssl.html

it should work.

I changed it to

permitted;IP.0=10.0.0.0/8

just to see what would happen. That gives me a Segfault ...


Well, the name constraints with .personal.lan aren't legal, that's why
they are rejected. OpenSSL will let you write things in there that will
then fail to interoperate.

Rejecting illegal constraints is wonderful, but they shouldn't cause crashes, no?

Reply via email to