cron2 has uploaded a new patch set (#2) to the change originally created by MaxF. ( http://gerrit.openvpn.net/c/openvpn/+/1549?usp=email )
The following approvals got outdated and were removed: Code-Review+2 by plaisthos Change subject: Avoid unbounded allocations in pkcs11_mbedtls.c ...................................................................... Avoid unbounded allocations in pkcs11_mbedtls.c The PKCS#11 provider can crash OpenVPN by making it try to allocate 2^64 bytes for a certificate. To avoid this, set a maximum size for certificates. If the size is exceeded, don't try to allocate memory and instead exit pkcs11_get_x509_cert with an error. The chosen maximum size is 100.000 bytes which is twice the size of a SLH-DSA (aka SPHINCS+) signature. Found-by: ZeroPath (https://zeropath.com/) Reported-by: Joshua Rogers <[email protected]> Github: closes OpenVPN/openvpn-private-issues#42 Change-Id: I53d47e4a0d33c380ee95e0e33aecad3db3197940 Signed-off-by: Max Fillinger <[email protected]> Acked-by: Arne Schwabe <[email protected]> Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1549 Message-Id: <[email protected]> URL: https://www.mail-archive.com/[email protected]/msg35807.html Signed-off-by: Gert Doering <[email protected]> --- M src/openvpn/pkcs11_mbedtls.c 1 file changed, 16 insertions(+), 0 deletions(-) git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/49/1549/2 diff --git a/src/openvpn/pkcs11_mbedtls.c b/src/openvpn/pkcs11_mbedtls.c index 66aefac..bf9d953 100644 --- a/src/openvpn/pkcs11_mbedtls.c +++ b/src/openvpn/pkcs11_mbedtls.c @@ -42,6 +42,16 @@ static bool pkcs11_get_x509_cert(pkcs11h_certificate_t pkcs11_cert, mbedtls_x509_crt *cert) { + /* We set a maximum size for certificates so that the PKCS provider cannot crash OpenVPN by + * making it try to allocate 2^64 bytes. The maximum of 100.000 bytes is picked as a round + * number that easily accomodates the currently standardized quantum-safe signature algorithms. + * It is twice the size of a SLH-DSA (aka SPHINCS+) signature plus public key. + * + * However, there are additional digital signature schemes currently on the NIST on-ramp + * (e.g., some parameter settings for LESS) that have even larger public keys or signatures, so + * if those ever see use on smartcards, we will need to increase this number. */ + const size_t max_cert_size = 100000; + unsigned char *cert_blob = NULL; size_t cert_blob_size = 0; bool ret = false; @@ -52,6 +62,12 @@ goto cleanup; } + if (cert_blob_size > max_cert_size) + { + msg(M_WARN, "PKCS#11: Certificate too large: %lu bytes, maximum is %lu", cert_blob_size, max_cert_size); + goto cleanup; + } + check_malloc_return((cert_blob = calloc(1, cert_blob_size))); if (pkcs11h_certificate_getCertificateBlob(pkcs11_cert, cert_blob, &cert_blob_size) != CKR_OK) { -- To view, visit http://gerrit.openvpn.net/c/openvpn/+/1549?usp=email To unsubscribe, or for help writing mail filters, visit http://gerrit.openvpn.net/settings?usp=email Gerrit-MessageType: newpatchset Gerrit-Project: openvpn Gerrit-Branch: master Gerrit-Change-Id: I53d47e4a0d33c380ee95e0e33aecad3db3197940 Gerrit-Change-Number: 1549 Gerrit-PatchSet: 2 Gerrit-Owner: MaxF <[email protected]> Gerrit-Reviewer: plaisthos <[email protected]> Gerrit-CC: cron2 <[email protected]> Gerrit-CC: openvpn-devel <[email protected]> Gerrit-CC: syzzer <[email protected]>
_______________________________________________ Openvpn-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openvpn-devel
