Fix an arbitrary out-of-bounds stack read in v2i_IPAddrBlocks()
authortb <tb@openbsd.org>
Thu, 23 Dec 2021 23:41:26 +0000 (23:41 +0000)
committertb <tb@openbsd.org>
Thu, 23 Dec 2021 23:41:26 +0000 (23:41 +0000)
commit9addd72264df6ee29cbfe1edebcb8f3accc809d1
tree39a8b858cff1ee66cb101fab5eecd7e56ead5732
parent95665f7a1edcfb1517b063a7576c1e6caa64249b
Fix an arbitrary out-of-bounds stack read in v2i_IPAddrBlocks()

Switch an insufficiently checked strtoul() to strtonum(). This can
be used to trigger a read of a user-controlled size from the stack.

$ openssl req -new -addext 'sbgp-ipAddrBlock = IPv4:192.0.2.0/12341234'
Segmentation fault (core dumped)

The bogus prefix length 12341234 is fed into X509v3_addr_add_prefix() and
used to read (prefixlen + 7) / 8 bytes from the stack variable 'min[16]'
that ends up as 'data' in the memmove in ASN1_STRING_set().

The full fix will add length checks to X509v3_addr_add_prefix() and
make_addressPrefix() and will be dealt with later. The entire
X509v3_{addr,asid}_* API will need a thorough review before it can be
exposed.

This code is only enabled in -current and can only be reached from
openssl.cnf files that contain sbgp-ipAddrBlock or from the openssl(1)
command line.

ok jsing
lib/libcrypto/x509/x509_addr.c