# CVE-2021-4044: Invalid handling of X509_verify_cert() internal errors in libssl

> An attacker can cause application crashes or infinite loops in OpenSSL clients by triggering mishandled internal certificate verification errors.

- **Severity:** High 7.5 (`CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H`)
- **Exploited in the wild:** Not known
- **Login needed:** Not needed
- **Attackable:** Over the internet
- **Victim action needed:** Not needed
- **Fix available:** Yes
- **Published:** 14 Dec 2021
- **Updated:** 17 Sep 2024
- **Also known as:** ALPINE-CVE-2021-4044, BIT-node-2021-4044, BIT-node-min-2021-4044, CLEANSTART-2026-VH14803, GHSA-mmjf-f5jw-w72q, RUSTSEC-2021-0129, UBUNTU-CVE-2021-4044

## What is CVE-2021-4044?

CVE-2021-4044 is a high-severity denial of service vulnerability in Netapp Cloud Backup, published on 14 Dec 2021. An attacker can exploit it over the internet without logging in, with no action from the victim.

### Official 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).

Weakness: CWE-835 (Loop with Unreachable Exit Condition)

## Which versions are affected by CVE-2021-4044?

5 open source packages ship an affected version, including openssl-src, node and node-min. It affects 16 products.


| Package | Ecosystem | Affected | Fixed in |
| --- | --- | --- | --- |
| `openssl-src` | crates.io | From 300.0.0 | 300.0.4 |
| `openssl-src` | crates.io | From 300.0.0 | 300.0.4 |
| `openssl-src` | crates.io | From 300.0.0 | 300.0.4 |
| `node` | Bitnami | From 17.0.0 | 17.3.0 |
| `node-min` | Bitnami | From 17.0.0 | 17.3.0 |

Products: Netapp 500f Firmware, Netapp A250 Firmware, Netapp Cloud Backup, Netapp E-Series Performance Analyzer, Netapp H300e Firmware, Netapp H300s Firmware, Netapp H410c Firmware, Netapp H410s Firmware, Netapp H500e Firmware, Netapp H500s Firmware, Netapp H700e Firmware, Netapp H700s Firmware, Netapp Ontap Select Deploy Administration Utility, Netapp Snapcenter, Nodejs Node.js, Openssl Openssl.

## How do I fix CVE-2021-4044?

Upgrade openssl-src to 300.0.4 or later.

## Is CVE-2021-4044 being exploited?

There is no known exploitation of CVE-2021-4044 in the wild and no public exploit code.

Public exploit code:

- https://github.com/phirojshah/CVE-2021-4044 (github_poc): https://github.com/phirojshah/CVE-2021-4044

## Other vulnerabilities in Netapp Cloud Backup

- [CVE-2024-6119](https://insights.sbomify.com/CVE-2024-6119/): Possible denial of service in X.509 name checks (high 7.5)

## Fix prompt for AI coding agents

```text
Check this codebase for CVE-2021-4044 and fix it if it is affected.

What it is: CVE-2021-4044 is a high-severity denial of service vulnerability in Netapp Cloud Backup, published on 14 Dec 2021. An attacker can exploit it over the internet without logging in, with no action from the victim.
Exploitation: There is no known exploitation of CVE-2021-4044 in the wild and no public exploit code.

Affected packages and fixed versions:
- openssl-src (crates.io): affected from 300.0.0; fixed in 300.0.4
- openssl-src (crates.io): affected from 300.0.0; fixed in 300.0.4
- openssl-src (crates.io): affected from 300.0.0; fixed in 300.0.4
- node (Bitnami): affected from 17.0.0; fixed in 17.3.0
- node-min (Bitnami): affected from 17.0.0; fixed in 17.3.0

Task:
1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.
2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.
3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.
4. Run the tests and summarise what changed and why.
5. If nothing in the project is affected, say so and change nothing.

Reference: https://insights.sbomify.com/CVE-2021-4044/ (Markdown: https://insights.sbomify.com/CVE-2021-4044/index.md)
```

## Sources

- CVE record: https://www.cve.org/CVERecord?id=CVE-2021-4044
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2021-4044
- OSV: https://osv.dev/vulnerability/CVE-2021-4044

---
From sbomify Insights: https://insights.sbomify.com/CVE-2021-4044/
Summaries are generated and may contain mistakes; the official description above is the record.
