Skip to content

GHSA-mmjf-f5jw-w72q BIT-node-2021-4044 BIT-node-min-2021-4044 CVE-2021-4044 RUSTSEC-2021-0129

Invalid handling of `X509_verify_cert()` internal errors in libssl

High crates.io
Severity
7.5 / 10
High · CVSS 3.1
Exploit chance (EPSS)
50.10%
Chance of exploitation in the next 30 days. Higher than 98.91% of scored vulnerabilities.
Known exploited
No
Not in CISA's catalog
Weakness
CWE-835 Loop with Unreachable Exit Condition ('Infinite Loop')
Fix
300.0.4
Upgrade openssl-src to this version or later

Description

Internally libssl in OpenSSL calls X509_verify_cert() on the client side to verify a certificate supplied by a server. That function may return a negative return value to indicate an internal error (for example out of memory). Such a negative return value is mishandled by OpenSSL and will cause an IO function (such as SSL_connect() or SSL_do_handshake()) to not indicate success and a subsequent call to SSL_get_error() to return the value SSL_ERROR_WANT_RETRY_VERIFY. This return value is only supposed to be returned by OpenSSL if the application has previously called SSL_CTX_set_cert_verify_callback(). Since most applications do not do this the SSL_ERROR_WANT_RETRY_VERIFY return value from SSL_get_error() will be totally unexpected and applications may not behave correctly as a result. The exact behaviour will depend on the application but it could result in crashes, infinite loops or other similar incorrect responses. This issue is made more serious in combination with a separate bug in OpenSSL 3.0 that will cause X509_verify_cert() to indicate an internal error when processing a certificate chain. This will occur where a certificate does not include the Subject Alternative Name extension but where a Certificate Authority has enforced name constraints. This issue can occur even with valid chains. By combining the two issues an attacker could induce incorrect, application dependent behaviour. Fixed in OpenSSL 3.0.1 (Affected 3.0.0).

Affected versions

crates.io

PackageVulnerableFixed in
openssl-src
>= 300.0.0, < 300.0.4
300.0.4

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

openssl-src crates.io → 300.0.4

cargo
cargo update -p openssl-src --precise 300.0.4

Severity breakdown

CVSS 3.1 7.5

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Weakness

CWE-835: Loop with Unreachable Exit Condition ('Infinite Loop')

The product contains an iteration or loop with an exit condition that cannot be reached, i.e., an infinite loop.

References

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy it's related
GHSA-w67w-mw4j-8qrv
openssl-src contains Read Buffer Overflow in X.509 Name Constraint
Medium Also affects openssl-src
GHSA-vrh7-x64v-7vxq
openssl-src contains `NULL` dereference during PKCS7 data verification
High Also affects openssl-src
GHSA-vxrh-cpg7-8vjr
openssl-src subject to NULL dereference validating DSA public key
High Also affects openssl-src
GHSA-r7jw-wp68-3xch
openssl-src vulnerable to Use-after-free following `BIO_new_NDEF`
High Also affects openssl-src
GHSA-v5w6-wcm8-jm4q
openssl-src contains Double free after calling `PEM_read_bio_ex`
High Also affects openssl-src
GHSA-p52g-cm5j-mjv4
openssl-src subject to Timing Oracle in RSA Decryption
Medium Also affects openssl-src
GHSA-29xx-hcv2-c4cp
openssl-src subject to Invalid pointer dereference in `d2i_PKCS7` functions
High Also affects openssl-src
GHSA-x4qr-2fvf-3mr5
Vulnerable OpenSSL included in cryptography wheels
High Also affects openssl-src
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor