CVE-2026-27932

CVE-2026-27932 is a high-severity allocation of resources without limits or throttling vulnerability in joserfc (pip), affecting versions < 1.6.3. It is fixed in 1.6.3.

Does this CVE actually affect you?

Kodem shows which CVEs are reachable and running in your applications, so you fix what's exploitable, not just what's listed.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Runtime intelligence, not another scanner.

Summary

joserfc's PBES2 p2c Unbounded Iteration Count enables Denial of Service (DoS)

A resource exhaustion vulnerability in joserfc allows an unauthenticated attacker to cause a Denial of Service (DoS) via CPU exhaustion. When the library decrypts a JSON Web Encryption (JWE) token using Password-Based Encryption (PBES2) algorithms, it reads the p2c (PBES2 Count) parameter directly from the token's protected header. This parameter defines the number of iterations for the PBKDF2 key derivation function. Because joserfc does not validate or bound this value, an attacker can specify an extremely large iteration count (e.g., 2^31 - 1), forcing the server to expend massive CPU resources processing a single token.

This vulnerability exists at the JWA layer and impacts all high-level JWE and JWT decryption interfaces if PBES2 algorithms are allowed by the application's policy.

Details

Vulnerable file: src/joserfc/_rfc7518/jwe_algs.py
Vulnerable function: PBES2HSAlgKeyEncryption.decrypt_cek()
Lines: 283

def decrypt_cek(self, recipient: Recipient[OctKey]) -> bytes:
    headers = recipient.headers()
    # ...
    p2c = headers["p2c"]  # ← attacker-controlled integer
    # ...
    kek = self.compute_derived_key(key.get_op_key("deriveKey"), p2s, p2c)

The p2c value is then passed to compute_derived_key :

def compute_derived_key(self, key: bytes, p2s: bytes, p2c: int) -> bytes:
    # ...
    kdf = PBKDF2HMAC(
        algorithm=self.hash_alg,
        length=self.key_size // 8,
        salt=salt,
        iterations=p2c,  # ← unbounded iterations
        backend=default_backend(),
    )

Impact on JWT Policies
Any JWT policy configured to allow PBES2 key management algorithms (e.g., PBES2-HS256+A128KW) is vulnerable. Because the DoS occurs during the decryption phase, the attack is triggered before any claim validation (e.g.,
exp,iss, aud checks) or nested signature verification takes place. This makes existing JWT "policies" ineffective as a defense if the underlying algorithm is permitted.

PoC

Tested against joserfc 1.6.2.
Local Reproduction:

import time
from joserfc import jwe
from joserfc.jwk import OctKey

# Force joserfc to use local source if needed
# sys.path.insert(0, "src")

# Attacker-crafted token with 10 million iterations
# Normally legitimate p2c is ~2048-4096. 10M iterations = ~5s DoS.
token = "eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwicDJzIjoiWjI5dVpYSm1ZdyIsInAyYyI6MTAwMDAwMDB9.dummy.dummy.dummy.dummy"

key = OctKey.import_key(b"any-password")

t0 = time.perf_counter()
try:
    # This call will hang the thread for seconds
    jwe.decrypt_compact(token, key, algorithms=["PBES2-HS256+A128KW", "A128CBC-HS256"])
except Exception:
    pass
print(f"Elapsed: {time.perf_counter() - t0:.2f}s")

Impact

An unauthenticated remote attacker can exhaust the CPU resources of a server by sending a small number of crafted JWE/JWT tokens. Each token will occupy a worker thread/process for a duration proportional to the p2c value (up to several minutes or hours depending on the integer value). This results in a complete Denial of Service for legitimate users.

The application allocates resources such as memory, threads, or file descriptors based on untrusted input without enforcing a cap. Typical impact: resource exhaustion leading to denial of service.

CVE-2026-27932 has a CVSS score of 7.5 (High). The vector is network-reachable, no privileges required, and no user interaction. A CVSS score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether this affects your application depends on whether the vulnerable code is present and reachable in your environment. A fixed version is available (1.6.3); upgrading removes the vulnerable code path.

Affected versions

joserfc (< 1.6.3)

Security releases

joserfc → 1.6.3 (pip)

Kodem intelligence

Severity tells you how bad this could be in the worst case. It does not tell you whether you are exposed. Exploitability and impact are functions of runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A vulnerable package can sit in your dependency tree and never run.

Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter. Kodem's runtime-powered SCA identifies whether this CVE is reachable in your applications.

Already deployed Kodem?

See it in your environmentNew to Kodem? Get a demo →

Remediation advice

Minimal fix: Implement an upper bound check for the p2c parameter in PBES2HSAlgKeyEncryption.decrypt_cek().

MAX_P2C = 300000  # Example security bound

# ... inside decrypt_cek ...
p2c = headers["p2c"]
if not isinstance(p2c, int) or p2c > MAX_P2C:
    raise DecodeError(f"p2c iteration count too high (max {MAX_P2C})")

Additionally, applications should only enable PBES2 algorithms if password-based encryption is specifically required and should enforce a strict algorithms allowlist in their JWT/JWE policies.

Frequently Asked Questions

  1. What is CVE-2026-27932? CVE-2026-27932 is a high-severity allocation of resources without limits or throttling vulnerability in joserfc (pip), affecting versions < 1.6.3. It is fixed in 1.6.3. The application allocates resources such as memory, threads, or file descriptors based on untrusted input without enforcing a cap.
  2. How severe is CVE-2026-27932? CVE-2026-27932 has a CVSS score of 7.5 (High). This score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether it represents real risk in your environment depends on whether the vulnerable code is present and reachable.
  3. Which versions of joserfc are affected by CVE-2026-27932? joserfc (pip) versions < 1.6.3 is affected.
  4. Is there a fix for CVE-2026-27932? Yes. CVE-2026-27932 is fixed in 1.6.3. Upgrade to this version or later.
  5. Is CVE-2026-27932 exploitable, and should I be worried? Whether CVE-2026-27932 is exploitable in your environment depends on whether the vulnerable code is present and reachable. A CVSS score is a worst-case rating; it does not account for your specific deployment, configuration, or usage patterns. Kodem, an Intelligent Application Security platform, uses runtime intelligence to show which vulnerabilities actually execute in production, so you can focus on the ones that represent real risk. Get a demo
  6. What actually determines whether CVE-2026-27932 is exploitable, and how bad it is? Exploitability and impact are not fixed properties of a CVE. They depend on runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A high CVSS score on a dependency that never runs is not the same as real risk. Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter.
  7. How do I fix CVE-2026-27932? Upgrade joserfc to 1.6.3 or later.

Other vulnerabilities in joserfc

Stop the waste.
Protect your environment with Kodem.