CVE-2024-4603
Medium · 5.3CVSS
5.3
EPSS
1.1%
Published
May 16, 2024
CISA due date
—
Cloudanix analysis
A problem in checking very large security keys can make certain verification steps take a long time, potentially slowing or disrupting services that accept keys from outside sources.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The EVP_PKEY_param_check and EVP_PKEY_public_check functions perform unbounded modular arithmetic on DSA p parameters, allowing an attacker-supplied modulus larger than 10000 bits to trigger prolonged computation and CPU exhaustion.
Why it matters to the business
Applications that directly validate DSA keys or parameters from external sources can experience extended processing delays, resulting in service degradation or temporary unavailability without affecting core TLS operations.
How an attack unfolds
An attacker crafts a DSA key or parameter set containing an excessively large modulus and supplies it to an application that invokes EVP_PKEY_param_check or EVP_PKEY_public_check on untrusted input; the check routines consume significant CPU time before returning, producing a denial-of-service condition.
How to fix it
Upgrade OpenSSL to the version containing commit 3559e868e58005d15c6013a0c1fd832e51c73397. Applications should avoid calling the affected check functions on untrusted input until patched; command-line usage of openssl pkey -check and pkeyparam -check should be restricted to trusted material.
How to confirm the fix worked
Confirm the installed OpenSSL library reports a version that includes commit 3559e868e58005d15c6013a0c1fd832e51c73397; recompile dependent applications against the fixed library and verify that large-DSA check operations complete promptly or are rejected early.
Typical attack path
- Identify an application that calls EVP_PKEY_param_check or EVP_PKEY_public_check on externally supplied DSA material
- Generate a DSA parameter structure with a modulus exceeding 10000 bits
- Deliver the malformed key or parameters through the application's input channel
- Trigger the check function and observe sustained high CPU usage on the target process
How to detect it
Review application and system logs for unusually long execution times or high CPU attributed to DSA key or parameter validation routines; correlate with inbound network traffic containing large ASN.1 structures.
What your security team should do
- Apply the patch containing commit 3559e868e58005d15c6013a0c1fd832e51c73397 to all OpenSSL 3.0 and 3.1 deployments
- Audit source code for direct calls to EVP_PKEY_param_check and EVP_PKEY_public_check on untrusted data
- Disable or sandbox the openssl pkey -check and pkeyparam -check options in environments that process external keys
- Monitor CPU utilization on processes that perform DSA parameter validation
The record
Issue summary: Checking excessively long DSA keys or parameters may be very slow. Impact summary: Applications that use the functions EVP_PKEY_param_check() or EVP_PKEY_public_check() to check a DSA public key or DSA parameters may experience long delays. Where the key or parameters that are being checked have been obtained from an untrusted source this may lead to a Denial of Service. The functions EVP_PKEY_param_check() or EVP_PKEY_public_check() perform various checks on DSA parameters. Some of those computations take a long time if the modulus (`p` parameter) is too large. Trying to use a very large modulus is slow and OpenSSL will not allow using public keys with a modulus which is over 10,000 bits in length for signature verification. However the key and parameter check functions do not limit the modulus size when performing the checks. An application that calls EVP_PKEY_param_check() or EVP_PKEY_public_check() and supplies a key or parameters obtained from an untrusted source could be vulnerable to a Denial of Service attack. These functions are not called by OpenSSL itself on untrusted DSA keys so only applications that directly call these functions may be vulnerable. Also vulnerable are the OpenSSL pkey and pkeyparam command line applications when using the `-check` option. The OpenSSL SSL/TLS implementation is not affected by this issue. The OpenSSL 3.0 and 3.1 FIPS providers are affected by this issue.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:9 | openssl | 0 | 1:3.2.2-6.el9_5 |
| AlmaLinux:9 | openssl-devel | 0 | 1:3.2.2-6.el9_5 |
| AlmaLinux:9 | openssl-libs | 0 | 1:3.2.2-6.el9_5 |
| AlmaLinux:9 | openssl-perl | 0 | 1:3.2.2-6.el9_5 |
| Alpine:v3.17 | openssl | 0 | 3.0.13-r0 |
| Alpine:v3.18 | openssl | 0 | 3.1.5-r0 |
| Alpine:v3.19 | openssl | 0 | 3.1.5-r0 |
| Alpine:v3.20 | openssl | 0 | 3.3.0-r2 |
| Alpine:v3.21 | openssl | 0 | 3.3.0-r2 |
| Alpine:v3.22 | openssl | 0 | 3.3.0-r2 |
| Chainguard | libcrypto3 | 0 | 3.3.0-r8 |
| Chainguard | libssl3 | 0 | 3.3.0-r8 |
| Chainguard | openssl | 0 | 3.3.0-r8 |
| Chainguard | openssl-config | 0 | 3.3.0-r8 |
| Chainguard | openssl-dbg | 0 | 3.3.0-r8 |
| Chainguard | openssl-dev | 0 | 3.3.0-r8 |
| Chainguard | openssl-doc | 0 | 3.3.0-r8 |
| Chainguard | openssl-engine-afalg | 0 | 3.3.0-r8 |
| Chainguard | openssl-engine-capi | 0 | 3.3.0-r8 |
| Chainguard | openssl-engine-loader-attic | 0 | 3.3.0-r8 |
| Chainguard | openssl-engine-padlock | 0 | 3.3.0-r8 |
| Chainguard | openssl-provider-fips | 0 | 3.0.9-r2 |
| Chainguard | openssl-provider-fips | 0 | 3.4.0-r4 |
| Chainguard | openssl-provider-fips-3.1.2 | 0 | 3.1.2-r3 |
| Chainguard | openssl-provider-fips-3.1.2-dbg | 0 | 3.1.2-r3 |
| Chainguard | openssl-provider-legacy | 0 | 3.3.0-r8 |
| Debian:12 | openssl | 0 | 3.0.14-1~deb12u1 |
| Debian:13 | openssl | 0 | 3.2.2-1 |
| Mageia:9 | openssl | 0 | 3.0.13-1.1.mga9 |
| Mageia:9 | quictls | 0 | 3.0.14-1.1.mga9 |
| Red Hat:enterprise_linux:9::appstream | openssl | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::appstream | openssl-debuginfo | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::appstream | openssl-debugsource | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::appstream | openssl-devel | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::appstream | openssl-libs | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::appstream | openssl-libs-debuginfo | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::appstream | openssl-perl | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::baseos | openssl | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::baseos | openssl-debuginfo | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::baseos | openssl-debugsource | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::baseos | openssl-devel | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::baseos | openssl-libs | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::baseos | openssl-libs-debuginfo | 0 | 1:3.2.2-6.el9_5 |
| Red Hat:enterprise_linux:9::baseos | openssl-perl | 0 | 1:3.2.2-6.el9_5 |
| Rocky Linux:9 | openssl | 0 | 1:3.2.2-6.el9_5.1 |
| Rocky Linux:9 | openssl-fips-provider | 0 | 0:3.0.7-6.el9_5 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS | openssl-3 | 0 | 3.0.8-150400.4.54.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS | openssl-3 | 0 | 3.0.8-150400.4.54.1 |
| SUSE:Linux Enterprise Micro 5.3 | openssl-3 | 0 | 3.0.8-150400.4.54.1 |
| SUSE:Linux Enterprise Micro 5.4 | openssl-3 | 0 | 3.0.8-150400.4.54.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP5 | openssl-3 | 0 | 3.0.8-150500.5.33.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP6 | openssl-3 | 0 | 3.1.4-150600.5.7.1 |
| SUSE:Linux Enterprise Server 15 SP4-LTSS | openssl-3 | 0 | 3.0.8-150400.4.54.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP4 | openssl-3 | 0 | 3.0.8-150400.4.54.1 |
| SUSE:Manager Proxy 4.3 | openssl-3 | 0 | 3.0.8-150400.4.54.1 |
| SUSE:Manager Server 4.3 | openssl-3 | 0 | 3.0.8-150400.4.54.1 |
| Ubuntu:20.04:LTS | openssl | 0 | 1.1.1f-1ubuntu2.23 |
| Ubuntu:22.04:LTS | nodejs | 0 | No fix |
| Ubuntu:22.04:LTS | openssl | 0 | 3.0.2-0ubuntu1.17 |
| Ubuntu:24.04:LTS | edk2 | 0 | No fix |
| Ubuntu:24.04:LTS | openssl | 0 | 3.0.13-0ubuntu3.2 |
| Ubuntu:24.10 | edk2 | 0 | No fix |
| Ubuntu:24.10 | openssl | 0 | 3.2.2-1ubuntu1 |
| Ubuntu:Pro:16.04:LTS | nodejs | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | nodejs | 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:22.04:LTS | openssl | 0 | 3.0.2-0ubuntu1.17+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 |
| Wolfi | libcrypto3 | 0 | 3.3.0-r8 |
| Wolfi | libssl3 | 0 | 3.3.0-r8 |
| Wolfi | openssl | 0 | 3.3.0-r8 |
| Wolfi | openssl-config | 0 | 3.3.0-r8 |
| Wolfi | openssl-dbg | 0 | 3.3.0-r8 |
| Wolfi | openssl-dev | 0 | 3.3.0-r8 |
| Wolfi | openssl-doc | 0 | 3.3.0-r8 |
| Wolfi | openssl-engine-afalg | 0 | 3.3.0-r8 |
| Wolfi | openssl-engine-capi | 0 | 3.3.0-r8 |
| Wolfi | openssl-engine-loader-attic | 0 | 3.3.0-r8 |
| Wolfi | openssl-engine-padlock | 0 | 3.3.0-r8 |
| Wolfi | openssl-provider-legacy | 0 | 3.3.0-r8 |
| openSUSE:Leap 15.5 | openssl-3 | 0 | 3.0.8-150500.5.33.1 |
| openSUSE:Leap 15.6 | openssl-3 | 0 | 3.1.4-150600.5.7.1 |
| openSUSE:Leap Micro 5.3 | openssl-3 | 0 | 3.0.8-150400.4.54.1 |
| openSUSE:Leap Micro 5.4 | openssl-3 | 0 | 3.0.8-150400.4.54.1 |
| openSUSE:Tumbleweed | openssl-3 | 0 | 3.1.4-8.1 |
Related vulnerabilities
- CVE-2024-12797 Issue summary: Clients using RFC7250 Raw Public Keys (RPKs) to authenticate a server may… Also affects openssl
- 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-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