Releases: wolfSSL/wolfssl
wolfSSL release version 4.8.0
wolfSSL Release 4.8.0 (July 09, 2021)
Release 4.8.0 of wolfSSL embedded TLS has bug fixes and new features including:
Vulnerabilities
- [Low] OCSP request/response verification issue. In the case that the serial number in the OCSP request differs from the serial number in the OCSP response the error from the comparison was not resulting in a failed verification. We recommend users that have wolfSSL version 4.6.0 and 4.7.0 with OCSP enabled update their version of wolfSSL. Version 4.5.0 and earlier are not affected by this report. Thanks to Rainer, Roee, Barak, Hila and Shoshi (from Cymotive and CARIAD) for the report.
- [Low] CVE-2021-24116: Side-Channel cache look up vulnerability in base64 PEM decoding for versions of wolfSSL 4.5.0 and earlier. Versions 4.6.0 and up contain a fix and do not need to be updated for this report. If decoding a PEM format private key using version 4.5.0 and older of wolfSSL then we recommend updating the version of wolfSSL used. Thanks to Florian Sieck, Jan Wichelmann, Sebastian Berndt and Thomas Eisenbarth for the report.
New Feature Additions
New Product
- Added wolfSentry build with --enable-wolfsentry and tie-ins to wolfSSL code for use with wolfSentry
Ports
- QNX CAAM driver added, supporting ECC black keys, CMAC, BLOBs, and TRNG use
- _WIN32_WCE wolfCrypt port added
- INTIME_RTOS directory support added
- Added support for STM32G0
- Renesas RX: Added intrinsics for rot[rl], revl (thanks @rliebscher)
- Added support for running wolfcrypt/test/testwolfcrypt on Dolphin emulator to test DEVKITPRO port
- Zephyr project port updated to latest version 2.6.X
ASN1 and PKCS
- Storing policy constraint extension from certificate added
- Added support for NID_favouriteDrink pilot
- Added the API function wc_EncryptPKCS8Key to handle encrypting a DER, PKCS#8-formatted key
Compatibility Layer Additions
- Open Source PORTS Added/Updated
- OpenVPN
- OpenLDAP
- socat-1.7.4.1
- Updated QT port for 5.15.2
- Changes to extend set_cipher_list() compatibility layer API to have set_ciphersuites compatibility layer API capability
- Added more support for SHA3 in the EVP layer
- API Added
- MD5/MD5_Transform
- SHA/SHA_Transform/SHA1_Transform
- SHA224/SHA256_Transform/SHA512_Transform
- SSL_CTX_get0_param/SSL_CTX_set1_param
- X509_load_crl_file
- SSL_CTX_get_min_proto_version
- EVP_ENCODE_CTX_new
- EVP_ENCODE_CTX_free
- EVP_EncodeInit
- EVP_EncodeUpdate
- EVP_EncodeFinal
- EVP_DecodeInit
- EVP_DecodeUpdate
- EVP_DecodeFinal
- EVP_PKEY_print_public
- BIO_tell
- THREADID_current
- THREADID_hash
- SSL_CTX_set_ecdh_auto
- RAND_set_rand_method()
- X509_LOOKUP_ctrl()
- RSA_bits
- EC_curve_nist2nid
- EC_KEY_set_group
- SSL_SESSION_set_cipher
- SSL_set_psk_use_session_callback
- EVP_PKEY_param_check
- DH_get0_pqg
- CRYPTO_get_ex_new_index
- SSL_SESSION_is_resumable
- SSL_CONF_cmd
- SSL_CONF_CTX_finish
- SSL_CTX_keylog_cb_func
- SSL_CTX_set_keylog_callback
- SSL_CTX_get_keylog_callback
Misc.
- Added wolfSSL_CTX_get_TicketEncCtx getter function to return the ticket encryption ctx value
- Added wc_AesKeyWrap_ex and wc_AesKeyUnWrap_ex APIs to accept an Aes object to use for the AES operations
- Added implementation of AES-GCM streaming (--enable-aesgcm-stream)
- Added deterministic generation of k with ECC following RFC6979 when the macro WOLFSL_ECDSA_DETERMINISTIC_K is defined and wc_ecc_set_deterministic function is called
- Implemented wc_DsaParamsDecode and wc_DsaKeyToParamsDer
- Asynchronous support for TLS v1.3 TLSX ECC/DH key generation and key agreement
- Added crypto callback support for Ed/Curve25519 and SHA2-512/384
- TLS 1.3 wolfSSL_key_update_response function added to see if a update response is needed
Fixes
- Fix for detecting extra unused bytes that are in an ASN1 sequence appended to the end of a valid ECC signature
- Fix for keyid with ktri CMS (breaks compatibility with previous keyid ASN1 syntax)
- Fix for failed handshake if a client offers more than 150 cipher suites. Thanks to Marcel Maehren, Philipp Nieting, Robert Merget from Ruhr University Bochum Sven Hebrok, Juraj Somorovsky from Paderborn University
- Fix for default order of deprecated elliptic curves SECP224R1, SECP192R1, SECP160R1. Thanks to Marcel Maehren, Philipp Nieting, Robert Merget from Ruhr University Bochum Sven Hebrok, Juraj Somorovsky from Paderborn University
- Fix for corner TLS downgrade case where a TLS 1.3 setup that allows for downgrades but has TLS 1.3 set as the minimum version would still downgrade to TLS 1.2
PKCS7 (Multiple fixes throughout regarding memory leaks with SMIME and heap buffer overflows due to streaming functionality)
- Fix PKCS7 dynamic content save/restore in PKCS7_VerifySignedData
- Fix for heap buffer overflow on compare with wc_PKCS7_DecryptKtri
- Fix for heap buffer overflow with wc_PKCS7_VerifySignedData
- Fix for heap buffer overflow with wc_PKCS7_DecodeEnvelopedData
- Check size of public key used with certificate passed into wc_PKCS7_InitWithCert before XMEMCPY to avoid overflow
- Fix for heap buffer overflow fix for wolfSSL_SMIME_read_PKCS7
- Fix to cleanly free memory in error state with wolfSSL_SMIME_read_PKCS7
- SMIME error checking improvements and canonicalize multi-part messages before hashing
DTLS Fixes
- DTLS fix to correctly move the Tx sequence number forward
- DTLS fix for sequence and epoch number with secure renegotiation cookie exchange
- Fix for Chacha-Poly AEAD for DTLS 1.2 with secure renegotiation
PORT Fixes
- Fix AES, aligned key for the HW module with DCP port
- Fix ATECC608A TNGTLS certificate size issue (thanks @vppillai)
- Fixes for mingw compile warnings
- Fixes for NXP LTC ECC/RSA
- Fix ESP32 RSA hw accelerator initialization issue
- Fixes for STM32 PKA with ECC
- Fixes for STM32 AES GCM for HAL's that support byte sized headers
- Espressif ESP32 SHA_CTX macro conflict resolved
Math Library Fixes
- For platforms that support limits.h or windows make sure both SIZEOF_LONG_LONG and SIZEOF_LONG are set to avoid issues with CTC_SETTINGS
- SP C 32/64: fix corner cases around subtraction affecting RSA PSS use
- Fix to return the error code from sp_cond_swap_ct when malloc fails
- Fix potential memory leak with small stack in the function fp_gcd
- Static Analysis Fixes
- Fixes made from Coverity analysis including:
- Cleanups for some return values,
- Fix for leak with wolfSSL_a2i_ASN1_INTEGER
- Sanity check on length in wolfSSL_BN_rand
- Sanity check size in TLSX_Parse catching a possible integer overflow
- Fixes found with -fsanitize=undefined testing
- Fix null dereferences or undefined memcpy calls
- Fix alignment in myCryptoDevCb
- Fix default DTLS context assignment
- Added align configure option to force data alignment
Misc.
- Fix for wolfSSL_ASN1_TIME_adj set length
- Fix for freeing structure on error case in the function AddTrustedPeer
- Return value of SSL_read when called after bidirectional shutdown
- Fix for build options ./configure --enable-dtls --disable-asn
- FIx for detection of a salt length from an RSA PSS signature
- Fix to free up globalRNGMutex mutex when cleaning up global RNG
- Fix leak when multiple hardware names are in SAN
- Fix nonblocking ret value from CRL I/O callbacks
- Fix wolfSSL_BIO_free_all return type to better match for compatibility layer
- Fix for make distcheck, maintainer-clean, to allow distribution builds
- Fix for async with fragmented packets
- Fix for the build or RSA verify or public only
- Fix for return value of wolfSSL_BIO_set_ssl to better match expected compatibility layer return value
- Fix for sanity checks on size of issuer hash and key along with better freeing on error cases with DecodeBasicOcspResponse
- Fix for potential memory leak with wolfSSL_OCSP_cert_to_id
Improvements/Optimizations
DTLS/TLS Code Base
- Improved TLS v1.3 time rollover support
- TLS 1.3 PSK: use the hash algorithm to choose cipher suite
- TLS Extended Master Secret ext: TLS13 - send in second Client Hello if in first
- TLS Encrypt then MAC: check all padding bytes are the same value
- wolfSSL_GetMaxRecordSize updated to now take additional cipher data into account
- Updated session export/import with DTLS to handle a new internal options flag
- Refactored dtls_expected_peer_handshake_number handling
- Added wolfSSL_CTX_get_ephemeral_key and wolfSSL_get_ephemeral_key for loading a constant key in place of an ephemeral one
- Improved checking of XSNPRINTF return value in DecodePolicyOID
Build Options and Warnings
- Added wolfSSL_CTX_set_verify to the ABI list
- Adjusted FP_ECC build to not allow SECP160R1, SECP160R2, SECP160K1 and SECP224K1. FP_ECC does not work with scalars that are the length of the order when the order is longer than the prime.
- Added CMake support for CURVE25519, ED25519, CURVE448, and ED448
- cmake addition to test paths when building
- Added support for session tickets in CMake
- Added support for reproducible builds with CMake
- Turn on reproducible-build by default when enable-distro
- Windows Project: Include the X448 and Ed448 files
- GCC-11 compile time warning fixes
- Fix for compiling build of ./configure '--disable-tlsv12' '-enable-pkcallbacks'
- Added build error for insecure build combination of secure renegotiation enabled with extended master secret disabled when session resumption is enabled
- Updated building and running with Apple M1
- Apache httpd build without TLS 1.3 macro guard added
- Enable SHA3 and SHAKE256 requirements automatically when ED448 is enabled
- Added option for AES CBC cipher routines to return BAD_LENGTH_E when called with an input buffer...
wolfSSL release version 4.7.0
wolfSSL Release 4.7.0 (February 16, 2021)
Release 4.7.0 of wolfSSL embedded TLS has bug fixes and new features including:
New Feature Additions
- Compatibility Layer expansion SSL_get_verify_mode, X509_VERIFY_PARAM API, X509_STORE_CTX API added
- WOLFSSL_PSK_IDENTITY_ALERT macro added for enabling a subset of TLS alerts
- Function wolfSSL_CTX_NoTicketTLSv12 added to enable turning off session tickets with TLS 1.2 while keeping TLS 1.3 session tickets available
- Implement RFC 5705: Keying Material Exporters for TLS
- Added --enable-reproducible-build flag for making more deterministic library outputs to assist debugging
- Added support for S/MIME (Secure/Multipurpose Internet Mail Extensions) bundles
Fixes
- Fix to free mutex when cert manager is free’d
- Compatibility layer EVP function to return the correct block size and type
- DTLS secure renegotiation fixes including resetting timeout and retransmit on duplicate HelloRequest
- Fix for edge case with shrink buffer and secure renegotiation
- Compile fix for type used with curve448 and PPC64
- Fixes for SP math all with PPC64 and other embedded compilers
- SP math all fix when performing montgomery reduction on one word modulus
- Fixes to SP math all to better support digit size of 8-bit
- Fix for results of edge case with SP integer square operation
- Stop non-ct mod inv from using register x29 with SP ARM64 build
- Fix edge case when generating z value of ECC with SP code
- Fixes for PKCS7 with crypto callback (devId) with RSA and RNG
- Fix for compiling builds with RSA verify and public only
- Fix for PKCS11 not properly exporting the public key due to a missing key type field
- Call certificate callback with certificate depth issues
- Fix for out-of-bounds read in TLSX_CSR_Parse()
- Fix incorrect AES-GCM tag generation in the EVP layer
- Fix for out of bounds write with SP math all enabled and an edge case of calling sp_tohex on the result of sp_mont_norm
- Fix for parameter check in sp_rand_prime to handle 0 length values
- Fix for edge case of failing malloc resulting in an out of bounds write with SHA256/SHA512 when small stack is enabled
Improvements/Optimizations
- Added --enable-wolftpm option for easily building wolfSSL to be used with wolfTPM
- DTLS macro WOLFSSL_DTLS_RESEND_ONLY_TIMEOUT added for resending flight only after a timeout
- Update linux kernel module to use kvmalloc and kvfree
- Add user settings option to cmake build
- Added support for AES GCM session ticket encryption
- Thread protection for global RNG used by wolfSSL_RAND_bytes function calls
- Sanity check on FIPs configure flag used against the version of FIPs bundle
- --enable-aesgcm=table now is compatible with --enable-linuxkm
- Increase output buffer size that wolfSSL_RAND_bytes can handle
- Out of directory builds resolved, wolfSSL can now be built in a separate directory than the root wolfssl directory
Vulnerabilities
- [HIGH] CVE-2021-3336: In earlier versions of wolfSSL there exists a potential man in the middle attack on TLS 1.3 clients. Malicious attackers with a privileged network position can impersonate TLS 1.3 servers and bypass authentication. Users that have applications with client side code and have TLS 1.3 turned on, should update to the latest version of wolfSSL. Users that do not have TLS 1.3 turned on, or that are server side only, are NOT affected by this report. For the code change see #3676. Thanks to Aina Toky Rasoamanana and Olivier Levillain from Télécom SudParis for the report.
- [LOW] In the case of using custom ECC curves there is the potential for a crafted compressed ECC key that has a custom prime value to cause a hang when imported. This only affects applications that are loading in ECC keys with wolfSSL builds that have compressed ECC keys and custom ECC curves enabled.
- [LOW] With TLS 1.3 authenticated-only ciphers a section of the server hello could contain 16 bytes of uninitialized data when sent to the connected peer. This affects only a specific build of wolfSSL with TLS 1.3 early data enabled and using authenticated-only ciphers with TLS 1.3.
For additional vulnerability information visit the vulnerability page at
https://www.wolfssl.com/docs/security-vulnerabilities/
See INSTALL file for build instructions.
More info can be found on-line at https://wolfssl.com/wolfSSL/Docs.html
wolfSSL release version 4.6.0
wolfSSL Release 4.6.0 (December 22, 2020)
Release 4.6.0 of wolfSSL embedded TLS has bug fixes and new features including:
New Feature Additions
New Build Options
- wolfSSL now enables linux kernel module support. Big news for Linux kernel module developers with crypto requirements! wolfCrypt and wolfSSL are now loadable as modules in the Linux kernel, providing the entire libwolfssl API natively to other kernel modules. For the first time on Linux, the entire TLS protocol stack can be loaded as a module, allowing fully kernel-resident TLS/DTLS endpoints with in-kernel handshaking. (--enable-linuxkm, --enable-linuxkm-defaults, --with-linux-source) (https://www.wolfssl.com/loading-wolfssl-into-the-linux-kernel/)
- Build tests and updated instructions for use with Apple’s A12Z chipset (https://www.wolfssl.com/preliminary-cryptographic-benchmarks-on-new-apple-a12z-bionic-platform/)
- Expansion of wolfSSL SP math implementation and addition of --enable-sp-math-all build option
- Apache httpd w/TLS 1.3 support added
- Sniffer support for TLS 1.3 and AES CCM
- Support small memory footprint build with only TLS 1.3 and PSK without code for (EC)DHE and certificates
New Hardware Acceleration
- Added support for NXP DCP (i.MX RT1060/1062) crypto co-processor
- Add Silicon Labs hardware acceleration using SL SE Manager
New Algorithms
- RC2 ECB/CBC added for use with PKCS#12 bundles
- XChaCha and the XChaCha20-Poly1305 AEAD algorithm support added
Misc
- Added support for 802.11Q VLAN frames to sniffer
- Added OCSP function wolfSSL_get_ocsp_producedDate
- Added API to set CPU ID flags cpuid_select_flags, cpuid_set_flag, cpuid_clear_flag
- New DTLS/TLS non-blocking Secure Renegotiation example added to server.c and client.c
Fixes
Math Library
- Fix mp_to_unsigned_bin_len out of bounds read with buffers longer than maximum MP
- Fix for fp_read_radix_16 out of bounds read
- Fix to add wrapper for new timing resistant wc_ecc_mulmod_ex2 function version in HW ECC acceleration
- Handle an edge case with RSA-PSS encoding message to hash
Compatibility Layer Fixes
- Fix for setting serial number wolfSSL_X509_set_serialNumber
- Fix for setting ASN1 time not before / not after with WOLFSSL_X509
- Fix for order of components in issuer name when using X509_sign
- Fix for compatibility layer API DH_compute_key
- EVP fix incorrect block size for GCM and buffer up AAD for encryption/decryption
- EVP fix for AES-XTS key length return value and fix for string compare calls
- Fix for mutex freeing during RNG failure case with EVP_KEY creation
- Non blocking use with compatibility layer BIOs in TLS connections
Build Configuration
- Fix for custom build with WOLFSSL_USER_MALLOC defined
- ED448 compiler warning on Intel 32bit systems
- CURVE448_SMALL build fix for 32bit systems with Curve448
- Fix to build SP math with IAR
- CMake fix to only set ranlib arguments for Mac, and for stray typo of , -> ;
- Build with --enable-wpas=small fix
- Fix for building fips ready using openssl extra
- Fixes for building with Microchip (min/max and undef SHA_BLOCK_SIZE)
- FIx for NO_FILESYSTEM build on Windows
- Fixed SHA256 support for IMX-RT1060
- Fix for ECC key gen with NO_TFM_64BIT
Sniffer
- Fixes for sniffer when using static ECC keys. Adds back TLS v1.2 static ECC key fallback detection and fixes new ECC RNG requirement for timing resistance
- Fix for sniffer with SNI enabled to properly handle WOLFSSL_SUCCESS error code in ProcessClientHello
- Fix for sniffer using HAVE_MAX_FRAGMENT in "certificate" type message
- Fix build error with unused "ret" when building with WOLFSSL_SNIFFER_WATCH.
- Fix to not treat cert/key not found as error in myWatchCb and WOLFSSL_SNIFFER_WATCH.
- Sniffer fixes for handling TCP
out-of-range sequence number
- Fixes SSLv3 use of ECDH in sniffer
PKCS
- PKCS#11 fix to generate ECC key for decrypt/sign or derive
- Fix for resetting internal variables when parsing a malformed PKCS#7 bundle with PKCS7_VerifySignedData()
- Verify the extracted public key in wc_PKCS7_InitWithCert
- Fix for internal buffer size when using decompression with PKCS#7
Misc
- Pin the C# verify callback function to keep from garbage collection
- DH fixes for when public key is owned and free’d after a handshake
- Fix for TLS 1.3 early data packets
- Fix for STM32 issue with some Cube HAL versions and STM32 example timeout
- Fix mmCAU and LTC hardware mutex locking to prevent double lock
- Fix potential race condition with CRL monitor
- Fix for possible malformed encrypted key with 3DES causing negative length
- AES-CTR performance fixed with AES-NI
Improvements/Optimizations
SP and Math
- mp_radix_size adjustment for leading 0
- Resolve implicit cast warnings with SP build
- Change mp_sqr to return an error if the result won't fit into the fixed length dp
- ARM64 assembly with clang improvements, clang doesn't always handle use of x29 (FP or Frame Pointer) in inline assembly code correctly - reworked sp_2048_sqr_8 to not use x29
- SP mod exp changed to support exponents of different lengths
- TFM div: fix initial value of size in q so clamping doesn't OOB read
- Numerous stack depth improvements with --enable-smallstack
- Improve cache resistance with Base64 operations
TLS 1.3
- TLS 1.3 wolfSSL_peek want read return addition
- TLS 1.3: Fix P-521 algorithm matching
PKCS
- Improvements and refactoring to PKCS#11 key look up
- PKCS #11 changes for signing and loading RSA public key from private
- check PKCS#7 SignedData private key is valid before using it
- check PKCS#7 VerifySignedData content length against total bundle size to avoid large malloc
Compatibility Layer
- EVP add block size for more ciphers in wolfSSL_EVP_CIPHER_block_size()
- Return long names instead of short names in wolfSSL_OBJ_obj2txt()
- Add additional OpenSSL compatibility functions to update the version of Apache httpd supported
- add "CCM8" variants to cipher_names "CCM-8" ciphers, for OpenSSL compat
Builds
- Cortex-M SP ASM support for IAR 6.70
- STM Cube pack support (IDE/STM32Cube)
- Build option --enable-aesgcm=4bit added for AES-GCM GMULT using 4 bit table
- Xilinx IDE updates to allow XTIME override for Xilinx, spelling fixes in Xilinx README.md, and add Xilinx SDK printf support
- Added ED448 to the "all" options and ED448 check key null argument sanity check
- Added ARC4, 3DES, nullcipher, BLAKE2, BLAKE2s, XChaCha, MD2, and MD4 to the “all” options
- Added an --enable-all-crypto option, to enable only the wolfCrypt features of --enable-all, combinable with --enable-cryptonly
- Added the ability to selectively remove features from --enable-all and --enable-all-crypto using specific --disable- options
- Use Intel intrinsics with Windows for RDSEED and RDRAND (thanks to dr-m from MariaDB)
- Add option to build with WOLFSSL_NO_CLIENT_AUTH
- Updated build requirements for wolfSSH use to be less restrictive
- lighttpd support update for v1.4.56
- Added batch file to copy files to ESP-IDF folders and resolved warnings when using v4.0 ESP-IDF
- Added --enable-stacksize=verbose, showing at a glance the stack high water mark for each subtest in testwolfcrypt
ECC
- Performance increase for ECC verify only, using non constant time SP modinv
- During ECC verify add validation of r and s before any use
- Always use safe add and dbl with ECC
- Timing resistant scalar multiplication updated with use of Joye double-add ladder
- Update mp_jacobi function to reduce stack and increase performance for base ECC build
- Reduce heap memory use with wc_EccPrivateKeyDecode, Improvement to ECC wc_ecc_sig_to_rs and wc_ecc_rs_raw_to_sig to reduce memory use (avoid the mp_int)
- Improve StoreECC_DSA_Sig bounds checking
OCSP
- OCSP improvement to handle extensions in singleResponse
- support for OCSP request/response for multiple certificates
- OCSP Must Staple option added to require OCSP stapling response
- Add support for id-pkix-ocsp-nocheck extension
Misc
- Additional code coverage added for ECC and RSA, PKCS#7, 3DES, EVP and Blake2b operations
- DTLS MTU: check MTU on write
- Refactor hash sig selection and add the macros WOLFSSL_STRONGEST_HASH_SIG (picks the strongest hash) and WOLFSSL_ECDSA_MATCH_HASH (will pick the hash to match the ECC curve)
- Strict certificate version allowed from client, TLS 1.2 / 1.3 can not accept client certificates lower than version 3
- wolfSSL_get_ciphers_compat(), skip the fake indicator ciphers like the renegotiation indication and the quantum-safe hybrid
- When parsing session ticket, check TLS version to see whether they are version compatible
- Additional sanity check for invalid ASN1 padding on integer type
- Adding in ChaCha20 streaming feature with Mac and Intel assembly build
- Sniffer build with --enable-oldtls option on
wolfSSL Release 4.5.0 (08/19/2020)
wolfSSL Release 4.5.0 (August 19, 2020)
If you have questions about this release, feel free to contact us on our
info@ address.
Release 4.5.0 of wolfSSL embedded TLS has bug fixes and new features including:
New Feature Additions
- Added Xilinx Vitis 2019.2 example and README updates
- TLS v1.3 is now enabled by default
- Building FIPS 140-2 code and test on Solaris
- Secure renegotiation with DTLS 1.2
- Update RSA calls for hardware acceleration with Xilsecure
- Additional OpenSSL compatibility layer functions added
- Cypress PSoC6 wolfCrypt driver added
- Added STM32CubeIDE support
- Added certificate parsing and inspection to C# wrapper layer
- TLS v1.3 sniffer support added
- TSIP v1.09 for target board GR-ROSE support added
- Added support for the "X72N Envision Kit" evaluation board
- Support for ECC nonblocking using the configure options
"--enable-ecc=nonblock --enable-sp=yes,nonblock CFLAGS=-DWOLFSSL_PUBLIC_MP" - Added wc_curve25519_make_pub function to generate a public key given the
private one
Fixes
- PIC32MZ hardware cache and large hashes fix
- AES-GCM use with EVP layer in compatibility layer code
- Fix for RSA_LOW_MEM with ARM build of SP code
- Sanity check on tag length with AES-CCM to conform with RFC 3610
- Fixes for 32 and 64 bit software implementations of SP code when
WOLFSSL_SP_CACHE_RESISTANT is defined - GCC warning fixes for GCC 9 and later
- Sanity check on HKDF expand length to conform with RFC 5869
- Fixes for STM32 CubeMX HAL with AES-GCM
- Fixed point cache look up table (LUT) implementation fixes
- Fix for ARM 32bit SP code when calling div word
- Fix for potential out of bounds read when parsing CRLs
- Fix for potential out of bounds read with RSA unpadding
- AES-CCM optimized counter fix
- Updates to Xcode projects for new files and features
- Fix for adding CRL’s to a WOLFSSL_X509_STORE structure
- FIPSv2 build with opensslall build fixes
- Fixes for CryptoCell use with ECC and signature wrappers
- Fix for mod calculation with SP code dealing with 3072 bit keys
- Fix for handling certificates with multiple OU’s in name
- Fix for SP math implementation of sp_add_d and add a sanity check on
rshb range - Fix for sanity check on padding with DES3 conversion of PEM to DER
- Sanity check for potential out of bounds read with fp_read_radix_16
- Additional checking of ECC scalars.
- Fixing the FIPS Ready build w.r.t. ecc.c.
- When processing certificate names with OpenSSL compatibility layer
enabled, unknown name item types were getting handled as having NID 0,
and failing. Added a couple more items to what is handled correctly,
and ignoring anything that is an unknown type.
Improvements/Optimizations
- TLS 1.3 certificate verify update to handle 8192 bit RSA keys
- wpa_supplicant support with reduced code size option
- TLS 1.3 alerts encrypted when possible
- Many minor coverity fixes added
- Error checking when parsing PKCS12 DER
- IAR warning in test.c resolved
- ATECC608A improvements for use with Harmony 3 and PIC32 MZ
- Support for AES-GCM and wc_SignatureVerifyHash with static memory and no
malloc’s - Enable SNI by default with JNI/JSSE builds
- NetBSD GCC compiler warnings resolved
- Additional test cases and code coverage added including curve25519 and
curve448 tests - Option for user defined mutexes with WOLFSSL_USER_MUTEX
- Sniffer API’s for loading buffer directly
- Fixes and improvements from going through the DO-178 process were added
- Doxygen updates and fixes for auto documentation generation
- Changed the configure option for FIPS Ready builds to be
--enable-fips=ready
.
This release of wolfSSL includes fixes for 6 security vulnerabilities.
wolfSSL version 4.5.0 contains 6 vulnerability fixes: 2 fixes for TLS 1.3,
2 side channel attack mitigations, 1 fix for a potential private key leak
in a specific use case, 1 fix for DTLS.
- In earlier versions of wolfSSL there exists a potential man in the middle
attack on TLS 1.3 clients. Malicious attackers with a privileged network
position can impersonate TLS 1.3 servers and bypass authentication. Users
that have applications with client side code and have TLS 1.3 turned on,
should update to the latest version of wolfSSL. Users that do not have
TLS 1.3 turned on, or that are server side only, are NOT affected by this
report. Thanks to Gerald Doussot from NCC group for the report. - Denial of service attack on TLS 1.3 servers from repetitively sending
ChangeCipherSpecs messages. This denial of service results from the
relatively low effort of sending a ChangeCipherSpecs message versus the
effort of the server to process that message. Users with TLS 1.3 servers are
recommended to update to the most recent version of wolfSSL which limits the
number of TLS 1.3 ChangeCipherSpecs that can be received in order to avoid
this DoS attack. CVE-2020-12457 was reserved for the report. Thanks to
Lenny Wang of Tencent Security Xuanwu LAB. - Potential cache timing attacks on public key operations in builds that are
not using SP (single precision). Users that have a system where malicious
agents could execute code on the system, are not using the SP build with
wolfSSL, and are doing private key operations on the system (such as signing
with a private key) are recommended to regenerate private keys and update to
the most recent version of wolfSSL. CVE-2020-15309 is reserved for this
issue. Thanks to Ida Bruhns from Universität zu Lübeck for the report. - When using SGX with EC scalar multiplication the possibility of side-channel
attacks are present. To mitigate the risk of side channel attacks wolfSSL’s
single precision EC operations should be used instead. Release 4.5.0 turns
this on be default now with SGX builds and in previous versions of wolfSSL
this can be turned on by using the WOLFSSL_SP macros. Thank you to
Alejandro Cabrera Aldaya, Cesar Pereida García and Billy Bob Brumley from
the Network and Information Security Group (NISEC) at Tampere University for
the report. - Leak of private key in the case that PEM format private keys are bundled in
with PEM certificates into a single file. This is due to the
misclassification of certificate type versus private key type when parsing
through the PEM file. To be affected, wolfSSL would need to have been built
with OPENSSL_EXTRA (--enable-opensslextra). Some build variants such as
--enable-all and --enable-opensslall also turn on this code path, checking
wolfssl/options.h for OPENSSL_EXTRA will show if the macro was used with the
build. If having built with the opensslextra enable option and having placed
PEM certificates with PEM private keys in the same file when loading up the
certificate file, then we recommend updating wolfSSL for this use case and
also recommend regenerating any private keys in the file. - During the handshake, clear application_data messages in epoch 0 are
processed and returned to the application. Fixed by dropping received
application_data messages in epoch 0. Thank you to Paul Fiterau of Uppsala
University and Robert Merget of Ruhr-University Bochum for the report.
For additional vulnerability information visit the vulnerability page at
https://www.wolfssl.com/docs/security-vulnerabilities/
See INSTALL file for build instructions.
More info can be found on-line at https://wolfssl.com/wolfSSL/Docs.html
wolfSSL Release 4.4.0 (04/22/2020)
wolfSSL Release 4.4.0 (04/22/2020)
If you have questions about this release, feel free to contact us on our
info@ address.
Release 4.4.0 of wolfSSL embedded TLS has bug fixes and new features including:
New Feature Additions
- Hexagon support.
- DSP builds to offload ECC verify operations.
- Certificate Manager callback support.
- New APIs for running updates to ChaCha20/Poly1305 AEAD.
- Support for use with Apache.
- Add support for IBM s390x.
- PKCS8 support for ED25519.
- OpenVPN support.
- Add P384 curve support to SP.
- Add BIO and EVP API.
- Add AES-OFB mode.
- Add AES-CFB mode.
- Add Curve448, X448, and Ed448.
- Add Renesas Synergy S7G2 build and hardware acceleration.
Fixes
- Fix for RSA public encrypt / private sign with RSA key sizes over 2048-bit.
- Correct misspellings.
- Secure renegotiation fix.
- Fix memory leak when using ATECC and non-SECP256R1 curves for sign, verify,
or shared secret. - Fix for K64 MMCAU with
WOLFSSL_SMALL_STACK_CACHE
. - Fix the RSA verify only build.
- Fix in SP C implementation for small stack.
- Fix using the auth key id extension is set, hash might not be present.
- Fix when flattening certificate structure to include the subject alt names.
- Fixes for building with ECC sign/verify only.
- Fix for ECC and no cache resistance.
- Fix memory leak in DSA.
- Fix build on minGW.
- Fix
PemToDer()
call inProcessBuffer()
to set more than ECC. - Fix for using RSA without SHA-512.
- Add some close tags to the echoserver HTTP example output.
- Miscellaneous fixes and updates for static analysis reports.
- Fixes for time structure support.
- Fixes for VxWorks support.
- Fixes for Async crypto support.
- Fix cache resist compile to work with SP C code.
- Fixes for Curve25519 x64 asm.
- Fix for SP x64 div.
- Fix for DTLS edge case where CCS and Finished come out of order and the
retransmit pool gets flushed. - Fix for infinite loop in SHA-1 with small inputs. Thanks to Peter W.
- Fix for FIPS Hmac where
wc_HmacInit()
isn't used.wc_HmacSetKey()
needs
to initialize the Hmac structure. Type is set to NONE, and checked against
NONE, not 0. - Fixes for SP RSA private operations.
- Fixes for Xilinx SDK and Zynq UltraScale+ MPSoC
- Fix leak when building with HAVE_AESGCM and NO_AES_DECRYPT. Thanks G.G.
- Fixes for building ECC without ASN.
- Fix for async TLSv1.3 issues.
- Fix
wc_KeyPemToDer()
with PKCS1 and empty key. - Omit
-fomit-frame-pointer
from CFLAGS in configure.ac.
Improvements/Optimizations
- Qt 5.12 and 5.13 support.
- Added more digest types to Cryptocell RSA sign/verify.
- Some memory usage improvements.
- Speed improvements for mp_rand.
- Improvements to CRL and OCSP support.
- Refactor Poly1305 AEAD/MAC to reduce duplicate code.
- Add blinding to RSA key gen.
- Improvements to blinding.
- Improvement and expansion of OpenSSL Compatibility Layer.
- Improvements to ChaCha20.
- Improvements to X.509 processing.
- Improvements to ECC support.
- Improvement in detecting 64-bit support.
- Refactor to combine duplicate ECC parameter parsing code.
- Improve keyFormat to be set by algId and let later key parsing produce fail.
- Add test cases for 3072-bit and 4096-bit RSA keys.
- Improve signature wrapper and DH test cases.
- Improvements to the configure.ac script.
- Added constant time RSA q modinv p.
- Improve performance of SP Intel 64-bit asm.
- Added a few more functions to the ABI list.
- Improve TLS bidirectional shutdown behavior.
- OpenSSH 8.1 support.
- Improve performance of RSA/DH operations on x64.
- Add support for PKCS7/CMS Enveloped data with fragmented encrypted content.
- Example linker description for FIPS builds to enforce object ordering.
- C# wrapper improvements. Added TLS client example and TLSv1.3 methods.
- Allow setting MTU in DTLS.
- Improve PKCS12 create for outputting encrypted bundles.
- Constant time EC map to affine for private operations.
- Improve performance of RSA public key ops with TFM.
- Smaller table version of AES encrypt/decrypt.
- Support IAR with position independent code (ROPI).
- Improve speed of AArch64 assembly.
- Support AES-CTR with AES-NI.
- Support AES-CTR on esp32.
- Add a no malloc option for small SP math.
This release of wolfSSL includes fixes for 2 security vulnerabilities.
-
For fast math, use a constant time modular inverse when mapping to affine
when operation involves a private key - keygen, calc shared secret, sign.
Thank you to Alejandro Cabrera Aldaya, Cesar Pereida García and
Billy Bob Brumley from the Network and Information Security Group (NISEC)
at Tampere University for the report. -
Change constant time and cache resistant ECC mulmod. Ensure points being
operated on change to make constant time. Thank you to Pietro Borrello at
Sapienza University of Rome.
For additional vulnerability information visit the vulnerability page at
https://www.wolfssl.com/docs/security-vulnerabilities/
See INSTALL file for build instructions.
More info can be found on-line at https://wolfssl.com/wolfSSL/Docs.html
wolfSSL release version 4.3.0
wolfSSL Release 4.3.0 (12/20/2019)
If you have questions about this release, then feel free to contact us on our info@ address.
Release 4.3.0 of wolfSSL embedded TLS has bug fixes and new features including:
New Feature Additions
- Add --enable-libwebsockets option for support of libwebsockets build
- Updated support for NGINX 1.15.0 and added support for 1.16.1
- Add wc_scrypt_ex API which can take in iterations rather than cost
- Updates to RSA-PSS salt lengths. Macro WOLFSSL_PSS_SALT_LEN_DISCOVER allows for discovering the salt length. Passing RSA_PSS_SALT_LEN_DISCOVER value into wc_RsaPSS_Verify_ex attempts to discover salt length and can use larger salt lengths
- Additional OpenSSL compatibility API wolfSSL_CertManagerGetCerts and wolfSSL_X509_STORE_GetCerts for retrieving certificates
- Add support for 4096-bit RSA/DH operations to SP (single precision) build
- Update support for Google WebRTC to branch m79
- Adds new FREESCALE_MQX_5_0 macro for MQX 5.0 support
- Adds a CMS/PKCS#7 callback for signing SignedData raw digests enabled with macro HAVE_PKCS7_RSA_RAW_SIGN_CALLBACK and call to function wc_PKCS7_SetRsaSignRawDigestCb
- Add --disable-errorqueue feature to disable adding debug nodes to queue with --enable-opensslextra build
- After defining WOLFSSL_SHUTDOWNONCE macro the function wolfSSL_shutdown will return a specific error code of SSL_SHUTDOWN_ALREADY_DONE_E, to indicate to the application that the shutdown has already occurred
- Add AES-CCM decryption to benchmarking app bundled with wolfSSL
Fixes
- Fixes IAR warnings with IAR-EWARM 7.50.2
- Alignment fixes for mmCAU with AES and hashing algorithms
- Fix check for plaintext length when using Encrypt-Then-MAC
- Fix for unit tests with NGINX and debug mode
- Fix for macro names in test cases (WOLFSSL_PUBLIC_MP) and pkcs7.c (HAVE_AESCCM)
- Fix for Apache want read case with BIO retry flag
- Fix for PKCS7 streaming mode that would error rather than verify bundle
- Fix for freeing mutex for X509 and wolfSSL_EVP_PKEY_free, applies to OPENSSL_EXTRA / --enable-opensslextra builds
- Fix for encrypt then MAC when re-handshaking, encrypted handshakes change over to ETM now
- Fix for curve25519 assembly optimizations with GCC + AVX2
- Fix to hang onto certificate for retrieval if using secure renegotiation and session resumption
- Fixes case where the heap hint is created before WOLFSSL_CTX, when calling wc_LoadStaticMemory instead of wolfSSL_CTX_load_static_memory
- Fix for setting correct return value in PKCS12 parse error case
- Reset certificate extension policy count
- Fix for memcpy with TLS I/O buffers when using staticmemory pools and loading memory as WOLFMEM_IO_POOL_FIXED
- Fixes and updates for STM32 port, including additional mutex protection, AES-GCM decrypt auth tag, AES-CTR mode with CubeMX, update to OpenSTM32 project
- Fix for EVP CipherUpdate decrypt and add a test case
- DTLS fixes including; some DTLS sequence number issues in general where the sequence was incremented twice for each record and some offset values in the DTLS window checking
- Fix sp_add to handle carries properly (--enable-sp-math build)
- Additional sanity check on OCSP response decoder
- Fix for vasprintf with Solaris and AIX builds
- Fix for missing variable declaration with --enable-scep --with-libz build
- Fix for certificate date check with async build
- Sanity check on “out” length with Base64_Decode added
- Decode X.509 name - check input length for jurisdiction
- Additional sanity check on variable out index with DecodePolicyOID
- Fix for PKCS#12 PBKDF buffer size for buffer overflow
- TLS supported curve extension check curve name is in range before checking for disabled
- Sanity check for non TLS 1.3 cipher suite with TLS 1.3 connection
- Poly1305 AVX2 assembly optimization fix for carry with large input values
- Fixes for coverity report including null termination of test case strings and initialization of PKCS7 variables
- Fix for API visibility of wc_ed25519_check_key which resolves a wolfcrypt-py install issue
- Sanity check on max ALPN length accepted
- Additional sanity check when parsing CRL’s for copying the structure, fix for bounds checking
- Additional checks on error string length for debug mode and check for null termination
- ProcessPeerCerts allocating memory for exts with OPENSSL_EXTRA properly
- Clear the top bit when generating a serial number
- Sanity check that ASN date characters are valid ASCII characters
- Fix to add deterministic ECDSA and fix corner cases for add point.
- When getting the DH public key, initialize the P, G, and Pub pointers to NULL, then set that we own the DH parameters flag. This allows FreeSSL to correctly clean up the DH key.
Improvements/Optimizations
- Added configure error report with using invalid build of --enable-opensslextra and --enable-opensslcoexist together
- Update PKCS11 for determining key type given the private key type
- Update DoVerifyCallback to check verify param hostName and ipasc (--enable-opensslextra builds)
- additional null sanity checks on input arguments with QSH and Cryptocell builds
- Additional checks on RSA key added to the function wc_CheckRsaKey
- Updates for EBSNET support, including fseek, revised macros in settings.h, and realloc support
- MISRA-C updates for SP math code
- Update to allow compiling for pwdbased/PBKDF2 with having NO_ASN defined
- Modify KeyShare and PreSharedKey TLS 1.3 extension linked list advancement to be easier for compilers to handle
- Optimization to parsing certificate extension name strings
- Adjustment to example server -x runtime behavior when encountering an unrecoverable error case
- Remove Blake2b support from HMAC
- Adds new hash wrapper init wc_HashInit_ex and Adds new PBKDF2 API wc_PBKDF2_ex for using heap hints for custom memory pools
- Adding script to cleanup generated test files, scripts/cleanup_testfiles.sh
- Support 20-byte serial numbers and disallow 0
- sp_div improved to handle when a has less digits than d (--enable-sp-math build)
- When decoding a policy OID and turning it into a human readable string use snprintf()
- set the IV length of EVP AES GCM to 96-bits by default
- Allow adding CAs for root CA's over the wire that do not have the extended key usage cert_sign set
- Added logging messages for SendAlert call and update to send alert after verify certificate callback
- updates for synchronous OCTEON support in the Sniffer
- Rework BER to DER functions to not be recursive
- Updates to find CRL by AuthKeyId
- Add a check for subject name hash after matching AKID
- Enhancement to mp_invmod/fp_exptmod/sp_exptmod to handle more inputs
- Remove requirement for macro NO_SKID when CRL use is enabled
- Improvements on XFTELL return code and MAX_WOLFSSL_FILE_SIZE checking
- When checking if value is prime return NO in the case of the value 1
- Improve Cortex-M RSA/DH assembly code performance
- Additional sanity checks on arrays and buffers with OCSP
This release of wolfSSL includes a fix for 6 security vulnerabilities.
A fix for having an additional sanity check when parsing certificate domain names was added. This fix checks that the domain name location index is not past the maximum value before setting it. The reported issue affects users that are parsing certificates and have --enable-opensslextra (macro OPENSSL_EXTRA), or build options that turn this on such as --enable-all, when building wolfSSL. The CVE associated with the fix is CVE-2019-18840.
Fix to set a limit on the maximum size of DTLS handshake messages. By default the RFC allows for handshake message sizes of up to 2^24-1 bytes long but in typical field use cases the handshake messages are not this large. Setting a maximum size limit on the handshake message helps avoid a potential DoS attack due to memory being malloc’d. The new default max size is set to handle a certificate chain length of approximately 9, 2048 bit RSA certificates. This only effects builds that have DTLS turned on and have applications that are using DTLS.
Fix for a potential hang when ECC caching is enabled (off by default) and --enable-fastmath is used. ECC caching is off by default and is turned on in builds that are using --enable-all or --enable-fpecc. This issue does not affect builds that are using the macro WOLFSSL_VALIDATE_ECC_IMPORT which turns on validating all ECC keys that are imported. To fix this potential hang case a sanity check on the input values to the internal invmod function was added.
To fix a potential fault injection attack on a wrapper function for wolfCrypt RSA signature generations an additional sanity check verifying the signature after it’s creation was added. This check is already done automatically in current versions of wolfSSL with TLS connections (internal function call of VerifyRsaSign during TLS state machine). The report only affects users making calls to the wolfCrypt function wc_SignatureGenerateHash and does not affect current TLS use cases. Thanks to Daniel Moghimi (@danielmgmi) from Worcester Polytechnic Institute for the report.
Blinding was added for DSA signing operations. The DSA signing uses the BEEA algorithm during modular inversion of the nonce which can potentially leak the nonce through side channels such as cache and power fluctuations. The fix of adding in blinding makes the DSA signing operation more resistant to side channel attacks. Users who have turned on DSA (disabled by default) and are performing signing operations should update. Note that DSA is not used in any TLS connections. Thanks to Daniel Moghimi (@danielmgmi) from Worcester Polytechnic Institute for the report.
Fix to add additional side channel cache attack resistance to the internal ECC function wc_ecc_mulmod_ex. This function by default is used with ECDSA signing operations. Users should update if performing ECDSA singi...
wolfSSL release version 4.2.0
wolfSSL Release 4.2.0 (10/22/2019)
If you have questions about this release, then feel free to contact us on our info@ address.
Release 4.2.0 of wolfSSL embedded TLS has bug fixes and new features including:
New Feature Additions
- Over 198 OpenSSL compatibility API’s added
- Apache port added for compiling with wolfSSL using --enable-apachehttpd
- Port for using wolfSSL with OpenVSwitch
- Port for Renesas TSIP added
- Visual Studio Solution for Azure Sphere Devices (MT3620 and MT3620-mini) added to the directory IDE/VS-AZURE-SPHERE
- Addition of Coldfire MCF5441X NetBurner example to the directory IDE/M68K/
- Added support for prime checking to SP math build
- Addition of DYNAMIC_TYPE_BIGINT type for tracking mp_int allocations
- Addition of wc_ecc_get_curve_params API for getting ecc_set_type params for a curve
- Adding in TLS_SHA256_SHA256 and TLS_SHA384_SHA384 TLS1.3 cipher suites (null ciphers)
- Added in PKCS7 decryption callbacks for CMS operations
- Added handling for optional ECC parameters with PKCS7 KARI
- Addition to configure.ac for FIPS wolfRand builds
- Adding the flag WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY for ignoring certificate date checks with the functions wolfSSL_CTX_load_verify_buffer_ex and wolfSSL_CTX_load_verify_locations_ex
- Support for PKCS8 keys added to the function wolfSSL_CTX_use_PrivateKey_buffer
- Support for KECCAK hashing. Build with macro WOLFSSL_HASH_FLAGS and call wc_Sha3_SetFlags(&sha, WC_HASH_SHA3_KECCAK256) before the first SHA3 update
- Addition of setting secure renegotiation at CTX level
- Addition of KDS (NXP Kinetis Design Studio) example project to directory IDE/KDS/
- Support for Encrypt-Then-MAC to TLS 1.2 and below
- Added a new build option for a TITAN session cache that can hold just over 2 million session entries (--enable-titancache)
- Synchronous Quick Assist Support for Sniffer
- Added Support for SiFive HiFive Unleashed board
- Support for Google WebRTC added in to compatibility layer build
- Additional Sniffer features; IPv6 sniffer support, Fragment chain input, Data store callback, Various statistics tweaks and other Sniffer fixes
Fixes
- Addition of internal content digest checks for PKCS7 SignedData message types that also have signed attributes present. Users could previously check the content digest against the messageDigest attribute, but this adds a default internal check. It’s advised that if users are not doing their own checks that they update wolfSSL version.
- A fix for BIO and base64 encoding/decoding
- A fix for memory management of CTX / WOLFSSL_METHOD pointer with staticmemory build
- A fix for detection of AES-NI support to read bit 25 from ECX
- A fix a DTLS handshake message retransmit bug corner case
- Additional fixes to coding style and uninitialized values using cppcheck tool
- Fixes for failing IAR builds, thanks to Joseph C. for the report
- Fixes for ARMv8 Poly1305 inline assembly code to compile with clang 3.5
- Fixes for esp-idf build warnings
- A fix for XSNPRINTF with mingw32 builds
- Fixes for strncpy warnings when compiling with newer versions of GCC
- A fix for using IV of all 0’s as default case with AES-NI when no IV passed in
- Fixes for types with 16 bit systems, thanks to Ralf Schlatterbeck
- Fixes for build with devcrypto/afalg and aesccm, thanks to GitHub user cotequeiroz for the report
- Fixes for addressing handling of pathLen constraint when parsing certificate chains
- A DTLS fix for alert packet injection at end of handshake
- Fixes for Poly1305 AArch64 assembly code
- A fix for memory management in error cases when adding a CA, this resolves a coverity report
- A fix for SP math for precomputation tables to not include infinity field
- Fixes for checks on defines with AVX2 and Poly1305 build
- Fixes for CubeMX HAL v1.15 with STM32F7
- A fix for TLS 1.3 to always send Key Share extension
- A fix for a potential buffer over read in TLS 1.3 DoTls13SupportedVersions, thanks to Artem for the report
Improvements/Optimizations
- Optimization to SP math, changing variables to const where possible. Thanks to Yair Poleg ([email protected]) of Ayyeka for proposing static declaration of global constant variables in SP code
- Additional fuzz testing and fixes for TLS 1.3 use, including additional TLS 1.3 alert messages (PR#2440 for more information)
- Additional sanity check that ciphersuite from client hello is used in server hello response (check can be removed with the macro WOLFSSL_NO_STRICT_CIPHER_SUITE)
- Improved MMCAU performance: SHA-1 by 35%, SHA-256 by 20% and MD5 by 78%
- By default, disallow SHA-2 cipher suites from being used in TLS 1.0 and 1.1 handshakes (can be ignored with macro WOLFSSL_OLDTLS_SHA2_CIPHERSUITES)
- Optimization of export session buffer size with enable option --enable-sessionexport=nopeer
- Spelling fixes in comments and some cast warnings resolved
- Updates to abstract atoi to XATOI when used, this allows for better portability when making calls to the system function atoi for converting strings to integers
- Improvements to the STSAFE-A100 error code handling, providing better debug information
- Adding a sanity check on TLS 1.3 ticket encrypt callback
- Specialized implementations of mod exp when base is 2
This release of wolfSSL includes a fix for 5 security vulnerabilities.
Fix for sanity check on reading TLS 1.3 pre-shared key extension. This fixes a potential for an invalid read when TLS 1.3 and pre-shared keys is enabled. Users without TLS 1.3 enabled are unaffected. Users with TLS 1.3 enabled and HAVE_SESSION_TICKET defined or NO_PSK not defined should update wolfSSL versions. Thanks to Robert Hoerr for the report.
Fix for potential program hang when ocspstapling2 is enabled. This is a moderate level fix that affects users who have ocspstapling2 enabled(off by default) and are on the server side. In parsing a CSR2 (Certificate Status Request v2 ) on the server side, there was the potential for a malformed extension to cause a program hang. Thanks to Robert Hoerr for the report.
Two moderate level fixes involving an ASN.1 over read by one byte. CVE-2019-15651 is for a fix that is due to a potential one byte over read when decoding certificate extensions. CVE-2019-16748 is for a fix on a potential one byte overread with checking certificate signatures. This affects builds that do certificate parsing and do not have the macro NO_SKID defined.Thanks to Yan Jia and the researcher team from Institute of Software, Chinese Academy of Sciences for the report.
High level fix for DSA operations involving an attack on recovering DSA private keys. This fix affects users that have DSA enabled and are performing DSA operations (off by default). All users that have DSA enabled and are using DSA keys are advised to regenerate DSA keys and update wolfSSL version. ECDSA is NOT affected by this and TLS code is NOT affected by this issue. Thanks to Ján Jančár for the report.
For additional vulnerability information visit the vulnerability page at https://www.wolfssl.com/docs/security-vulnerabilities/
See INSTALL file for build instructions.
More info can be found on-line at http://wolfssl.com/wolfSSL/Docs.html
wolfSSL release version 4.1.0
wolfSSL Release 4.1.0 (07/22/2019)
Release 4.1.0 of wolfSSL embedded TLS has bug fixes and new features including:
- A fix for the check on return value when verifying PKCS7 bundle signatures, all users with applications using the function wc_PKCS7_VerifySignedData should update
- Adding the function wc_PKCS7_GetSignerSID for PKCS7 firmware bundles as a getter function for the signers SID
- PKCS7 callback functions for unwrapping of CEK and for decryption
- Adding the error value PKCS7_SIGNEEDS_CHECK when no certificates are available in a PKCS7 bundle to verify the signature
- TLS 1.3 fixes including if major version is TLS Draft then it is now ignored and if version negotiation occurs but none were matched then an alert is now sent
- Addition of the WOLFSSL_PSK_ONE_ID macro for indicating that only one identity in TLS 1.3 PSK is available and will be cached
- Adding sanity checks on length of PSK identity from a TLS 1.3 pre-shared key extension
- Additional sanity checks and alert messages added for TLS 1.3
- Adding XTIME_MS macro to simplify the tls13.c time requirement
- Improvements and refactoring of code related to parsing and creating TLS 1.3 client hello packets
- TLS 1.3 version renegotiation now happens before interpreting ClientHello message
- Chacha20 algorithm optimizations on the ARM architecture for performance increase
- Poly1305 algorithm performance enhancements for the ARM architecture using the SIMD NEON extension
- Curve25519 and Ed25519 optimized for ARM architecture for performance increase
- SHA-512/384 optimizations for performance with ARM architecture using the SIMD NEON extension
- Sniffer updates including adding support for the null cipher and static ECDH key exchange and new SSLWatchCb callback
- Cipher suite TLS_RSA_WITH_NULL_MD5 for use with the sniffer (off by default)
- Sniffer statistic print outs with the macro WOLFSSL_SNIFFER_STATS defined
- A fix for wolfSSL_DH_generate_key when WOLFSSL_SMALL_STACK is defined
- wolfSSL_BN_Init implementation for opensslextra builds
- Updates to the function wolfSSL_i2d_RSAPrivateKey and additional automated tests
- Fixes for EVP_CipherFinal edge cases to match behavior desired
- Check for appropriate private vs public flag with ECC key decode in wolfSSL_EC_KEY_LoadDer_ex, thanks to Eric Miller for the report
- Implementation of the function wolfSSL_PEM_write_DHparams
- wolfSSL_RAND_seed is called in wolfSSL_Init now when opensslextra is enabled
- CryptoCell-310 support on nRF52840 added
- Fixes for atmel_ecc_create_pms to free the used slot.
- Fixes for building ATECC with ATCAPRINTF or WOLFSSL_PUBLIC_MP
- Cortex-M code changes to support IAR compiler
- Improvements to STM32 AES-GCM performance
- Fixes for 16-bit systems including PK callbacks, ATECC and LowResTimer function ptoto.
- IAR-EWARM compiler warning fix
- Clean up of user_settings for CS+ port
- Updating Renesas example projects to the latest version
- Micrium updates adjusting STATIC macro name and added inline flag
- Fixes for building with WOLFSSL_CUSTOM_CURVES on Windows
- Updates and refactor to the default build settings with Arduino
- Fixes for visibility tags with Cygwin build
- STSAFE Improvements to support wolfSSL Crypto Callbacks
- Improvements to NetBSD builds and mutex use in test case
- Updating TI hardware offload with WOLFSSL_TI_CRYPT build
- Maintaining Xilinx FreeRTOS port by adjusting time.h include in wolfSSL
- SiFive HiFive E31 RISC‐V core family port
- Port for Telit IoT AppZone SDK
- OCSP Response signed by issuer with identical SKID fix
- Fix for sending revoked certificate with OCSP
- Honor the status sent over connection with peers and do not perform an internal OCSP lookup
- Adding the build flag
--enable-ecccustcurves=all
to enable all curve types - Support add for Ed25519ctx and Ed25519ph sign/verify algorithms as per RFC 8032
- Addition of the macro WOLFSSL_NO_SIGALG to disable signature algorithms extension
- wc_AesCtrEncrypt in place addition, where input and output buffer can be the same buffer
- Single shot API added for SHA3; wc_Sha3_224Hash, wc_Sha3_256Hash, wc_Sha3_384Hash, wc_Sha3_512Hash
- Function additions for JSSE support some of which are wolfSSL_get_ciphers_iana and wolfSSL_X509_verify along with expansion of the --enable-jni option
- Macro guards for more modular SHA3 build (i.e. support for 384 size only)
- Benchmarking -thread argument support for asynchronous crypto
- Blake2s support (--enable-blake2s), which provides 32-bit Blake2 support
- Macro SHA256_MANY_REGISTERS addition to potentially speed up SHA256 depending on architecture
- Additional TLS alert messages sent with the macro WOLFSSL_EXTRA_ALERTS defined
- Feature to fail resumption of a session if the session’s cipher suite is not in the client’s list, this can be overridden by defining the macro NO_RESUME_SUITE_CHECK
- Fallback SCSV (Signaling Cipher Suite Value) support on Server only (--enable-fallback-scsv)
- DTLS export state only (wolfSSL_dtls_export_state_only) which is a subset of the information exported from previous DTLS export function
- Function wc_DhCheckPubValue added to perform simple validity checks on DH keys
- Support for RSA SHA-224 signatures with TLS added
- Additional option “-print” to the benchmark app for printing out a brief summary after benchmarks are complete
- Adding (--disable-pkcs12) option and improvements for disabled sections in pwdbased.c, asn.c, rsa.c, pkcs12.c and wc_encrypt
- Added DES3 support to the wolfSSL crypto callbacks
- Compile time fixes for build case with SP math and RSA only
- Fixes for Coverity static analysis report including explicit initialization of reported stack variables some additional Coverity fixes added thanks to Martin
- Fixes for scan build warnings (i.e possible null dereference in ecc.c)
- Resetting verify send value with a call to wolfSSL_clear function
- Fix for extern with sp_ModExp_2048 when building with --cpp option
- Fix for typo issue with --enable-sp=cortexm
- Adding #pragma warning disable 4127 for tfm.c when building with Visual Studio
- Improvements to the maximum ECC signature calculations
- Improvements to TLS write handling in error cases which helps user application not go through with a wolfSSL_write attempt after a wolfSSL_read failure
- Fix for read directory functions with Windows (wc_ReadDirFirst and wc_ReadDirNext)
- Sanity check on index before accessing domain component buffer in call to wolfSSL_X509_NAME_get_entry
- Sending fatal alert from client side on version error
- Fix for static RSA cipher suite with PK callback and no loaded private key
- Fix for potential memory leak in error case with the function wc_DsaKeyToDer, thanks to Chris H. for the report
- Adjusting STRING_USER macro to remove includes of standard lib <string.h> or <stdio.h>
- Bug fix for checking wrong allocation assignment in the function wc_PBKDF2 and handling potential leak on allocation failure. This case is only hit when the specific call to malloc fails in the function wc_PBKDF2. Thanks to Robert Altnoeder (Linbit) for the report
- Improved length checks when parsing ASN.1 certificates
- extern "C" additions to header files that were missing them
- Improved checking of return values with TLS extension functions and error codes
- Removing redundant calls to the generate function when instantiating and reseeding DRBG
- Refactoring and improvements to autoconf code with consolidating AM_CONDITIONAL statements
- Improvements for handling error return codes when reading input from transport layer
- Improvements to efficiency of SNI extension parsing and error checking with ALPN parsing
- Macro WOLFSSL_DEBUG_TLS addition for printing out extension data being parsed during a TLS connection
- Adjustment of prime testing with --disable-fastmath builds
This release of wolfSSL includes a fix for 2 security vulnerabilities.
There is a fix for a potential buffer overflow case with the TLSv1.3 PSK extension parsing. This affects users that are enabling TLSv1.3 (--enable-tls13). Thanks to Robert Hoerr for the report. The CVE associated with the report is CVE-2019-11873.
There is a fix for the potential leak of nonce sizes when performing ECDSA signing operations. The leak is considered to be difficult to exploit but it could potentially be used maliciously to perform a lattice based timing attack against previous wolfSSL versions. ECC operations with --enable-sp and --enable-sp-asm are not affected, users with private ECC keys in other builds that are performing ECDSA signing operations should update versions of wolfSSL along with private ECC keys. Thanks to Ján Jančár from Masaryk University for the report.
wolfSSL Release 4.0.0 (03/20/2019)
wolfSSL Release 4.0.0 (03/20/2019)
Release 4.0.0 of wolfSSL embedded TLS has bug fixes and new features including:
- Support for wolfCrypt FIPS v4.0.0, certificate #3389
- FIPS Ready Initiative
- Compatibility fixes for secure renegotiation with Chrome
- Better size check for TLS record fragment reassembly
- Improvements to non-blocking and handshake message retry support for DTLS
- Improvements to OCSP with ECDSA signers
- Added TLS server side secure renegotiation
- Added TLS Trusted CA extension
- Add support for the Deos Safety Critical RTOS
- OCSP fixes for memory management and initializations
- Fixes for EVP Cipher decryption padding checks
- Removal of null terminators on
wolfSSL_X509_print
substrings wolfSSL_sk_ASN1_OBJCET_pop
function renamed towolfSSL_sk_ASN1_OBJECT_pop
- Adjustment to include path in compatibility layer for evp.h and objects.h
- Fixes for decoding BER encoded PKCS7 contents
- TLS handshake now supports using PKCS 11 for private keys
- PKCS 11 support of HMAC, AES-CBC and random seeding/generation
- Support for named FFDHE parameters in TLS 1.2 (RFC 7919)
- Port to Zephyr Project
- Move the TLS PRF to wolfCrypt.
- Update to CMS KARI support
- Added ESP32 WROOM support
- Fixes and additions to the OpenSSL compatibility layer
- Added WICED Studio Support
- MDK CMSIS RTOS v2
- Xcode project file update
- Fixes for ATECC508A/ATECC608A
- Fixes issue with CA path length for self signed root CA's
- Fixes for Single Precision (SP) ASM when building sources directly
- Fixes for STM32 AES GCM
- Fixes for ECC sign with hardware to ensure the input is truncated
- Fixes for proper detection of PKCS7 buffer overflow case
- Fixes to handle degenerate PKCS 7 with BER encoding
- Fixes for TLS v1.3 handling of 6144 and 8192 bit keys
- Fixes for possible build issues with SafeRTOS
- Added
ECC_PUBLICKEY_TYPE
to the support PEM header types - Added strict checking of the ECDSA signature DER encoding length
- Added ECDSA option to limit sig/algos in client_hello to key size with
USE_ECDSA_KEYSZ_HASH_ALGO
- Added Cortex-M support for Single Precision (SP) math
- Added wolfCrypt RSA non-blocking time support
- Added 16-bit compiler support using --enable-16bit option
- Improved Arduino sketch example
- Improved crypto callback features
- Improved TLS benchmark tool
- Added new wrapper for snprintf for use with certain Visual Studio builds, thanks to David Parnell (Cambridge Consultants)
This release of wolfSSL includes a fix for 1 security vulnerability.
- Fixed a bug in tls_bench.c example test application unrelated to the crypto or TLS portions of the library. (CVE-2019-6439)
wolfSSL release version 3.15.7
wolfSSL Release 3.15.7 (12/26/2018)
Release 3.15.7 of wolfSSL embedded TLS has bug fixes and new features including:
- Support for Espressif ESP-IDF development framework
- Fix for XCode build with iPhone simulator on i386
- PKCS7 support for generating and verify bundles using a detached signature
- Fix for build disabling AES-CBC and enabling opensslextra compatibility layer
- Updates to sniffer for showing session information and handling split messages across records
- Port update for Micrium uC/OS-III
- Feature to adjust max fragment size post handshake when compiled with the macro WOLFSSL_ALLOW_MAX_FRAGMENT_ADJUST
- Adding the macro NO_MULTIBYTE_PRINT for compiling out special characters that embedded devices may have problems with
- Updates for Doxygen documentation, including PKCS #11 API and more
- Adding Intel QuickAssist v1.7 driver support for asynchronous crypto
- Adding Intel QuickAssist RSA key generation and SHA-3 support
- RSA verify only (--enable-rsavfy) and RSA public only (--enable-rsapub) builds added
- Enhancements to test cases for increased code coverage
- Updates to VxWorks port for use with Mongoose, including updates to the OpenSSL compatibility layer
- Yocto Project ease of use improvements along with many updates and build instructions added to the INSTALL file
- Maximum ticket nonce size was increased to 8
- Updating --enable-armasm build for ease of use with autotools
- Updates to internal code checking TLS 1.3 version with a connection
- Removing unnecessary extended master secret from ServerHello if using TLS 1.3
- Fix for TLS v1.3 HelloRetryRequest to be sent immediately and not grouped
This release of wolfSSL includes a fix for 1 security vulnerability.
Medium level fix for potential cache attack with a variant of Bleichenbacher’s attack. Earlier versions of wolfSSL leaked PKCS #1 v1.5 padding information during private key decryption that could lead to a potential padding oracle attack. It is recommended that users update to the latest version of wolfSSL if they have RSA cipher suites enabled and have the potential for malicious software to be ran on the same system that is performing RSA operations. Users that have only ECC cipher suites enabled and are not performing RSA PKCS #1 v1.5 Decryption operations are not vulnerable. Also users with TLS 1.3 only connections are not vulnerable to this attack. Thanks to Eyal Ronen (Weizmann Institute), Robert Gillham (University of Adelaide), Daniel Genkin (University of Michigan), Adi Shamir (Weizmann Institute), David Wong (NCC Group), and Yuval Yarom (University of Adelaide and Data61) for the report.
The paper for further reading on the attack details can be found at http://cat.eyalro.net/cat.pdf.