CVE-2024-9143
Medium · 4.3CVSS
4.3
EPSS
5.8%
Published
Oct 16, 2024
CISA due date
—
Cloudanix analysis
A rare flaw in how OpenSSL handles certain unusual curve math settings could let specially crafted inputs cause crashes or worse, so organizations should update the library even though everyday use is unlikely to be affected.
- Exploitation
- Remote Authenticated
- Attacker needs
- Low Privilege
- Complexity
- Low
- Impact
- Data Tampering
- Component
- Library
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Out-of-bounds memory reads or writes triggered by low-level GF(2^m) elliptic curve APIs when supplied untrusted explicit field polynomial values that have a zero constant term, via functions such as EC_GROUP_new_curve_GF2m, EC_GROUP_new_from_params, and BN_GF2m_* helpers.
Why it matters to the business
Applications that rely on exotic explicit binary curve parameters may experience abrupt termination or, in rare cases, remote code execution; standard named-curve or X.509 certificate usage is unaffected, so overall exposure and operational risk remain low but still require patching to eliminate the memory-safety gap.
How an attack unfolds
An attacker identifies an application that accepts or processes custom explicit GF(2^m) curve parameters through the vulnerable low-level APIs, crafts a field polynomial with a zero constant term, and supplies the malformed parameters to trigger out-of-bounds memory access; the resulting corruption may be leveraged for denial of service or, less commonly, code execution, although the attack surface is narrow because common protocols and certificate formats prevent such inputs.
How to fix it
Upgrade OpenSSL to a build that includes commit 72ae83ad214d2eef262461365a1975707f862712; rebuild and redeploy any dependent applications or libraries; avoid use of explicit GF(2^m) curve parameters with untrusted input until the update is applied.
How to confirm the fix worked
Confirm the presence of commit 72ae83ad214d2eef262461365a1975707f862712 in the OpenSSL source tree or verify the resulting library version; exercise any custom curve-handling code paths with both valid and previously problematic polynomial values to ensure no crashes occur.
Typical attack path
- Locate or coerce an application into using the low-level GF(2^m) curve construction APIs with attacker-controlled parameters
- Craft an explicit curve definition containing a field polynomial whose constant term is zero
- Submit the malformed parameters to EC_GROUP_new_curve_GF2m or equivalent
- Trigger out-of-bounds read or write to induce crash or attempt memory corruption exploitation
How to detect it
Search application and library logs for segmentation faults or memory errors during elliptic-curve initialization; review source code and configuration for any direct calls to the affected low-level GF(2^m) APIs with non-constant or externally supplied polynomials.
What your security team should do
- Inventory all uses of EC_GROUP_new_curve_GF2m, EC_GROUP_new_from_params, and BN_GF2m_* functions
- Apply the fixed commit or newer release in the next maintenance window
- Disable or sandbox any code paths that accept exotic explicit binary curve parameters from external sources
- Update dependency scanners to flag pre-fix OpenSSL versions
The record
Issue summary: Use of the low-level GF(2^m) elliptic curve APIs with untrusted explicit values for the field polynomial can lead to out-of-bounds memory reads or writes. Impact summary: Out of bound memory writes can lead to an application crash or even a possibility of a remote code execution, however, in all the protocols involving Elliptic Curve Cryptography that we're aware of, either only "named curves" are supported, or, if explicit curve parameters are supported, they specify an X9.62 encoding of binary (GF(2^m)) curves that can't represent problematic input values. Thus the likelihood of existence of a vulnerable application is low. In particular, the X9.62 encoding is used for ECC keys in X.509 certificates, so problematic inputs cannot occur in the context of processing X.509 certificates. Any problematic use-cases would have to be using an "exotic" curve encoding. The affected APIs include: EC_GROUP_new_curve_GF2m(), EC_GROUP_new_from_params(), and various supporting BN_GF2m_*() functions. Applications working with "exotic" explicit binary (GF(2^m)) curve parameters, that make it possible to represent invalid field polynomials with a zero constant term, via the above or similar APIs, may terminate abruptly as a result of reading or writing outside of array bounds. Remote code execution cannot easily be ruled out. The FIPS modules in 3.3, 3.2, 3.1 and 3.0 are not affected by this issue.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Alpine:v3.17 | openssl | 0 | 3.0.15-r1 |
| Alpine:v3.18 | openssl | 0 | 3.1.7-r1 |
| Alpine:v3.19 | openssl | 0 | 3.1.7-r1 |
| Alpine:v3.20 | openssl | 0 | 3.3.2-r1 |
| Alpine:v3.20 | openssl | 0 | 3.3.2-r3 |
| Alpine:v3.21 | openssl | 0 | 3.3.2-r3 |
| Alpine:v3.22 | openssl | 0 | 3.3.2-r3 |
| Chainguard | libcrypto3 | 0 | 3.3.2-r2 |
| Chainguard | libssl3 | 0 | 3.3.2-r2 |
| Chainguard | openssl | 0 | 3.3.2-r2 |
| Chainguard | openssl-config | 0 | 3.3.2-r2 |
| Chainguard | openssl-dbg | 0 | 3.3.2-r2 |
| Chainguard | openssl-dev | 0 | 3.3.2-r2 |
| Chainguard | openssl-doc | 0 | 3.3.2-r2 |
| Chainguard | openssl-engine-afalg | 0 | 3.3.2-r2 |
| Chainguard | openssl-engine-capi | 0 | 3.3.2-r2 |
| Chainguard | openssl-engine-loader-attic | 0 | 3.3.2-r2 |
| Chainguard | openssl-engine-padlock | 0 | 3.3.2-r2 |
| Chainguard | openssl-provider-fips | 0 | 3.0.9-r1 |
| Chainguard | openssl-provider-fips-3.1.2 | 0 | 0 |
| Chainguard | openssl-provider-fips-3.1.2-dbg | 0 | 0 |
| Chainguard | openssl-provider-legacy | 0 | 3.3.2-r2 |
| Debian:11 | openssl | 0 | No fix |
| Debian:11 | openssl | 0 | 1.1.1w-0+deb11u2 |
| Debian:11 | openssl | 0 | 1.1.1n-0+deb11u6 |
| Debian:12 | openssl | 0 | No fix |
| Debian:13 | openssl | 0 | No fix |
| Debian:13 | openssl | 0 | 3.3.2-2 |
| Debian:14 | openssl | 0 | 3.3.2-2 |
| Mageia:9 | openssl | 0 | 3.0.15-1.1.mga9 |
| Mageia:9 | quictls | 0 | 3.0.15-1.1.mga9 |
| Mageia:9 | quictls | 0 | 3.0.17-1.mga9 |
| Ubuntu:20.04:LTS | edk2 | 0 | No fix |
| Ubuntu:20.04:LTS | openssl | 0 | No fix |
| Ubuntu:20.04:LTS | openssl | 0 | 1.1.1f-1ubuntu2.24 |
| Ubuntu:22.04:LTS | edk2 | 0 | No fix |
| Ubuntu:22.04:LTS | edk2 | 0 | 2022.02-3ubuntu0.22.04.4 |
| Ubuntu:22.04:LTS | nodejs | 0 | No fix |
| Ubuntu:22.04:LTS | openssl | 0 | No fix |
| Ubuntu:22.04:LTS | openssl | 0 | 3.0.2-0ubuntu1.19 |
| Ubuntu:24.04:LTS | edk2 | 0 | No fix |
| Ubuntu:24.04:LTS | edk2 | 0 | 2024.02-2ubuntu0.6 |
| Ubuntu:24.04:LTS | openssl | 0 | No fix |
| Ubuntu:24.04:LTS | openssl | 0 | 3.0.13-0ubuntu3.5 |
| Ubuntu:24.10 | edk2 | 0 | No fix |
| Ubuntu:24.10 | openssl | 0 | No fix |
| Ubuntu:24.10 | openssl | 0 | 3.3.1-2ubuntu2.1 |
| Ubuntu:Pro:14.04:LTS | openssl | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | edk2 | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | nodejs | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | openssl | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | edk2 | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | nodejs | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | openssl | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | openssl1.0 | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | edk2 | 0 | No fix |
| Ubuntu:Pro:22.04:LTS | nodejs | 0 | No fix |
| Ubuntu:Pro:FIPS-preview:22.04:LTS | openssl | 0 | No fix |
| Ubuntu:Pro:FIPS-preview:22.04:LTS | openssl-fips | 0 | No fix |
| Ubuntu:Pro:FIPS-updates:18.04:LTS | openssl | 0 | No fix |
| Ubuntu:Pro:FIPS-updates:20.04:LTS | openssl | 0 | No fix |
| Ubuntu:Pro:FIPS-updates:20.04:LTS | openssl | 0 | 1.1.1f-1ubuntu2.fips.24 |
| Ubuntu:Pro:FIPS-updates:22.04:LTS | openssl | 0 | No fix |
| Ubuntu:Pro:FIPS-updates:22.04:LTS | openssl | 0 | 3.0.2-0ubuntu1.19+Fips1 |
| Ubuntu:Pro:FIPS-updates:22.04:LTS | openssl-fips | 0 | No fix |
| Ubuntu:Pro:FIPS-updates:24.04:LTS | openssl-fips | 0 | 3.0.13-0ubuntu3.6+Fips1 |
| Ubuntu:Pro:FIPS:16.04:LTS | openssl | 0 | No fix |
| Ubuntu:Pro:FIPS:18.04:LTS | openssl | 0 | No fix |
| Ubuntu:Pro:FIPS:20.04:LTS | openssl | 0 | No fix |
| Wolfi | libcrypto3 | 0 | 3.3.2-r2 |
| Wolfi | libssl3 | 0 | 3.3.2-r2 |
| Wolfi | openssl | 0 | 3.3.2-r2 |
| Wolfi | openssl-config | 0 | 3.3.2-r2 |
| Wolfi | openssl-dbg | 0 | 3.3.2-r2 |
| Wolfi | openssl-dev | 0 | 3.3.2-r2 |
| Wolfi | openssl-doc | 0 | 3.3.2-r2 |
| Wolfi | openssl-engine-afalg | 0 | 3.3.2-r2 |
| Wolfi | openssl-engine-capi | 0 | 3.3.2-r2 |
| Wolfi | openssl-engine-loader-attic | 0 | 3.3.2-r2 |
| Wolfi | openssl-engine-padlock | 0 | 3.3.2-r2 |
| Wolfi | openssl-provider-legacy | 0 | 3.3.2-r2 |
| openSUSE:Tumbleweed | openssl-3 | 0 | 3.1.4-15.1 |
Related vulnerabilities
- CVE-2024-4741 Issue summary: Calling the OpenSSL API function SSL_free_buffers may cause memory to be… Also affects openssl
- CVE-2024-6119 Issue summary: Applications performing certificate name checks (e.g., TLS clients… Also affects openssl
- CVE-2024-5535 Issue summary: Calling the OpenSSL API function SSL_select_next_proto with an empty… Also affects openssl
- CVE-2024-4603 Issue summary: Checking excessively long DSA keys or parameters may be very slow. Also affects openssl
- CVE-2023-6237 Issue summary: Checking excessively long invalid RSA public keys may take a long time. Also affects openssl
- CVE-2024-2511 Issue summary: Some non-default TLS server configurations can cause unbounded memory… Also affects openssl
- CVE-2024-0727 Issue summary: Processing a maliciously formatted PKCS12 file may lead OpenSSL to crash… Also affects openssl
- CVE-2023-6129 Issue summary: The POLY1305 MAC (message authentication code) implementation contains a… Also affects openssl