CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-3PRJ-6HQW-CM82

GHSA-3PRJ-6HQW-CM82: CPU Amplification Denial of Service in web-token JWT Library

Amit Schendel
Amit Schendel
Senior Security Researcher

Jun 19, 2026·5 min read·9 visits

Executive Summary (TL;DR)

Unbounded iteration count (p2c) in PBES2 decryption allows attackers to block PHP worker threads via highly asymmetric CPU exhaustion attacks, leading to denial of service.

An uncontrolled resource consumption vulnerability in the PBES2-HS* key wrapping algorithms of the web-token JWT library allows remote, unauthenticated attackers to cause a denial of service (DoS) by sending JWE tokens with unbounded iteration counts.

Vulnerability Overview

The vulnerability tracked under the identifier GHSA-3PRJ-6HQW-CM82 is an uncontrolled resource consumption flaw (CWE-400) within the password-based key-encryption (PBES2) algorithms of the web-token JWT library and framework ecosystem.

Specifically, the issue arises when parsing JSON Web Encryption (JWE) tokens utilizing PBES2-based key wrapping, such as PBES2-HS256+A128KW. The library exposes an unauthenticated attack surface through token parsing endpoints, where any incoming encrypted token is processed prior to validation.

An attacker can exploit this endpoint by specifying an extremely high PBES2 iteration count (p2c) in the JOSE header. Because the library fails to limit this iteration value, the processing server executes an excessively long key derivation cycle, resulting in thread exhaustion.

Root Cause Analysis

Under the JSON Web Encryption (JWE) standards outlined in RFC 7518 Section 4.8, PBES2 algorithms utilize the Password-Based Key Derivation Function 2 (PBKDF2) to derive key-wrapping keys. This derivation process relies on two parameters supplied in the JWE header: the salt input (p2s) and the iteration count (p2c).

The vulnerability is located in the PBES2AESKW::unwrapKey() method, which performs the key-unwrapping sequence. Prior to invoking the underlying PBKDF2 function, the method executes validation logic via checkHeaderAdditionalParameters() to ensure the parameters are valid.

However, this validation check was insufficient, verifying only that the p2c parameter was a positive integer. By sending a JWE with an arbitrary, extremely high p2c value (such as 2,147,483,647), an attacker forces the server to call the native PHP hash_pbkdf2() function with that count.

Because PBKDF2 is computationally intensive by design, executing billions of HMAC iterations blocks the executing thread. This execution blocks the backend process before any signature or cryptographic integrity checks are executed.

Code Analysis

The vulnerability stems from the absence of a ceiling value for the p2c parameter in the PBES2AESKW abstract class. The following diff demonstrates the modifications applied to resolve this flaw:

--- a/src/Library/Encryption/Algorithm/KeyEncryption/PBES2AESKW.php
+++ b/src/Library/Encryption/Algorithm/KeyEncryption/PBES2AESKW.php
@@ -16,12 +16,16 @@
 use function in_array;
 use function is_int;
 use function is_string;
+use function sprintf;
 
 abstract readonly class PBES2AESKW implements KeyWrapping
 {
+    public const DEFAULT_MAX_COUNT = 1_000_000;
+
     public function __construct(
         private readonly int $salt_size = 64,
-        private readonly int $nb_count = 4096
+        private readonly int $nb_count = 4096,
+        private readonly int $max_count = self::DEFAULT_MAX_COUNT
     ) {
         if (! interface_exists(WrapperInterface::class)) {
             throw new RuntimeException('Please install "spomky-labs/aes-key-wrap" to use AES-KW algorithms');
@@ -139,6 +143,12 @@ protected function checkHeaderAdditionalParameters(array $header): void
         if (! is_int($header['p2c']) || $header['p2c'] <= 0) {
             throw new InvalidArgumentException('The header parameter "p2c" is not valid.');
         }
+        if ($header['p2c'] > $this->max_count) {
+            throw new InvalidArgumentException(sprintf(
+                'The header parameter "p2c" is too large. The maximum allowed value is %d.',
+                $this->max_count
+            ));
+        }
     }

The fix introduces a private parameter $max_count set to a default limit of 1,000,000. Inside checkHeaderAdditionalParameters(), the library compares the incoming p2c value against this ceiling before performing any decryption operations.

If the iteration count exceeds the maximum limit, the method immediately throws an InvalidArgumentException. This terminates token processing before calling hash_pbkdf2(), preventing CPU exhaustion.

Exploitation Methodology

To exploit this vulnerability, an attacker constructs a malformed JWE token with an inflated p2c parameter. This attack does not require a valid key, signature, or valid payload data, as the resource consumption occurs during the key derivation phase before ciphertext verification.

First, the attacker identifies an API endpoint that parses and decrypts JWE tokens. The attacker then prepares a JOSE header specifying a PBES2 algorithm and an inflated p2c value, such as 2,147,483,647.

The attacker encodes the JSON header using Base64URL and appends dummy values for the encrypted key, initialization vector, ciphertext, and authentication tag. When this JWE is transmitted via HTTP, the target server immediately blocks its processing worker, resulting in a denial-of-service condition if concurrent requests are sent.

Impact Assessment

The impact of this vulnerability is classified as High, with a CVSS v4 score of 8.7. The primary threat vector is application-level denial of service due to asymmetric CPU resource consumption.

Because the server performs key derivation prior to validating the cryptographic integrity of the token, the computational cost is highly asymmetric. The attacker spends minimal resources generating a small text string, while the server spends maximum CPU cycles performing billions of hash operations.

On standard hardware, an iteration count of 100,000,000 blocks a single thread for roughly 87 seconds. By sending multiple concurrent requests, an attacker can exhaust all available PHP-FPM worker processes, making the entire web application unavailable to legitimate traffic.

Remediation & Defense

The primary defense against this vulnerability is updating the web-token dependencies to a patched release. Users of the 3.4.x branch should upgrade to 3.4.10, while users of the 4.0.x and 4.1.x branches should upgrade to 4.0.7 and 4.1.7 respectively.

If immediate updates are not feasible, you can mitigate the risk by hardening the constructor parameters. Explicitly configuring a lower, safer maximum limit (such as 10,000) restricts the permissible computational overhead.

Additionally, applications that do not strictly require PBES2 algorithms should remove them from the registered decryption AlgorithmManager. Implementing a custom pre-decryption middleware to parse the JWE header and reject excessive p2c parameters also mitigates the risk.

Fix Analysis (1)

Technical Appendix

CVSS Score
8.7/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Affected Systems

web-token/jwt-libraryweb-token/jwt-framework

Affected Versions Detail

Product
Affected Versions
Fixed Version
web-token/jwt-library
web-token
< 3.4.103.4.10
web-token/jwt-library
web-token
>= 4.0.0, < 4.0.74.0.7
web-token/jwt-library
web-token
>= 4.1.0, < 4.1.74.1.7
web-token/jwt-framework
web-token
<= 4.1.64.1.7
AttributeDetail
Vulnerability IDGHSA-3PRJ-6HQW-CM82
CWE IDCWE-400 / CWE-770
Attack VectorNetwork
CVSS v4 Score8.7 (High)
Exploit StatusNone (No active public campaigns)
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
T1499.003Endpoint Denial of Service: Application Exhaustion Flood
Impact
CWE-400
Uncontrolled Resource Consumption

The software does not properly control the allocation and maintenance of a limited resource, enabling an actor to influence the amount of resources consumed.

Vulnerability Timeline

Vulnerability discovered, fix released and advisory published as GHSA-3PRJ-6HQW-CM82
2026-06-18

References & Sources

  • [1]GitHub Security Advisory GHSA-3PRJ-6HQW-CM82
  • [2]Repository Advisory: PBES2-HS*+A*KW unwrap accepts an unbounded p2c iteration count
  • [3]GitHub Commit Diff: Security Fix Details
  • [4]FriendsOfPHP Security Advisory Database Entry
  • [5]RFC 7518 Section 4.8 - Password-Based Key Encryption with PBES2

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•1 day ago•CVE-2026-58263
7.2

CVE-2026-58263: Mutation Cross-Site Scripting (mXSS) in Jodit Editor clean-html Sanitizer

CVE-2026-58263 is a high-severity Mutation Cross-Site Scripting (mXSS) vulnerability affecting Jodit Editor prior to version 4.12.28. The flaw exists in Jodit's built-in clean-html sanitizer plugin, which fails to securely parse and sanitize nested elements containing foreign namespaces like MathML and SVG. Attackers can bypass sanitization by smuggling malicious payload elements inside rawtext container tags like style inside a MathML node, leading to DOM mutation and unauthenticated arbitrary script execution in the context of the user's browser session.

Amit Schendel
Amit Schendel
5 views•6 min read
•1 day ago•CVE-2026-65841
5.3

CVE-2026-65841: Client-Side Cross-Site Scripting (XSS) via Foreign Namespace Sanitization Bypass in Jodit Editor

Jodit Editor versions prior to 4.13.6 are vulnerable to client-side Cross-Site Scripting (XSS). The clean-html plugin's sanitization routine performs case-sensitive lookups against uppercase-only element blacklists. When processing XML-based foreign namespaces such as SVG or MathML, DOM engines preserve the lowercase format of tags. Because Jodit's denyTags check fails to normalize tag casing, malicious script blocks nested inside foreign namespace elements completely bypass validation and serialize directly into the editor output.

Amit Schendel
Amit Schendel
6 views•6 min read
•1 day ago•CVE-2026-53510
8.1

CVE-2026-53510: Remote Code Execution via Dynamic WSDL Parsing in Savon Ruby SOAP Client

A critical code injection vulnerability exists in Savon, a widely used SOAP client library for Ruby, prior to version 2.17.2. The vulnerability resides within the Savon::Model.all_operations module, where operation names fetched from a target Web Services Description Language (WSDL) document are dynamically evaluated via module_eval without sanitization. An attacker capable of manipulating the target WSDL document (e.g., through Man-in-the-Middle attacks, DNS hijacking, or Server-Side Request Forgery) can execute arbitrary Ruby code in the context of the parent application process.

Alon Barad
Alon Barad
11 views•6 min read
•1 day ago•CVE-2026-53466
6.5

CVE-2026-53466: Integer Conversion Overflow in ImageMagick XCF Decoder

An integer conversion overflow vulnerability exists in the XCF decoder of ImageMagick before version 6.9.13-51 and 7.1.2-26. The issue arises from mixed-type arithmetic that promotes calculation results to floating-point representations, causing an undefined cast back to integer. Under optimizing compilers, this undefined behavior results in bounds checks being bypassed, allowing out-of-bounds heap reads.

Amit Schendel
Amit Schendel
6 views•6 min read
•1 day ago•CVE-2026-53599
7.5

CVE-2026-53599: Authenticated Remote Code Execution in REDAXO CMS via Mediapool File Upload Validation Bypass

An authenticated file upload validation bypass vulnerability exists in the REDAXO CMS Mediapool addon in versions 5.18.2 through 5.21.0. Under permissive web server configurations, this allows authenticated users with media upload privileges to achieve remote code execution via multi-segment extension file uploads.

Alon Barad
Alon Barad
9 views•7 min read
•1 day ago•CVE-2026-52887
10.0

CVE-2026-52887: Critical SQL Injection and Remote Code Execution in NocoBase

A critical SQL injection vulnerability exists in the @nocobase/plugin-notification-in-app-message plugin of NocoBase prior to version 2.0.61. The flaw is caused by direct string interpolation of user-controlled input into a Sequelize.literal() query, allowing authenticated users to execute stacked PostgreSQL queries and achieve remote code execution on the underlying database server.

Amit Schendel
Amit Schendel
10 views•7 min read