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



CVE-2026-28490

CVE-2026-28490: Bleichenbacher Padding Oracle in Authlib RSA1_5 JWE Implementation

Alon Barad
Alon Barad
Software Engineer

Mar 16, 2026·7 min read·76 visits

Executive Summary (TL;DR)

A padding oracle vulnerability in Authlib's JWE RSA1_5 implementation allows remote attackers to decrypt intercepted JWE tokens. The issue stems from improper length validation of the decrypted CEK, which bypasses underlying cryptographic mitigations. Version 1.6.9 fixes the issue by disabling RSA1_5 by default.

Authlib versions prior to 1.6.9 contain a cryptographic padding oracle vulnerability in the JSON Web Encryption (JWE) RSA1_5 implementation. By mishandling the length check of decrypted Content Encryption Keys (CEK), the library exposes an exception oracle that allows unauthenticated remote attackers to decrypt intercepted JWE tokens via a Bleichenbacher attack.

Vulnerability Overview

CVE-2026-28490 describes a critical padding oracle vulnerability within Authlib, a widely deployed Python library utilized for building OAuth and OpenID Connect infrastructure. The flaw specifically resides in the implementation of the JSON Web Encryption (JWE) RSA1_5 key management algorithm. This algorithm is responsible for securely transmitting the Content Encryption Key (CEK) used to encrypt the token payload.

In standard JWE operations, the RSAES-PKCS1-v1_5 scheme encrypts the CEK. Modern cryptographic implementations recognize the inherent risks of PKCS#1 v1.5 padding and implement specific constant-time mitigations to prevent oracle attacks. The vulnerability in Authlib occurs because the library's internal key validation logic introduces an observable discrepancy, effectively neutralizing the mitigations provided by the underlying cryptographic primitives.

The resulting vulnerability is classified as CWE-203 (Observable Discrepancy) and CWE-327 (Use of a Broken or Risky Cryptographic Algorithm). Remote, unauthenticated attackers can leverage this observable discrepancy to perform a Bleichenbacher padding oracle attack. Successful exploitation allows the attacker to systematically decrypt the CEK and access the sensitive contents of intercepted JWE tokens.

Root Cause Analysis

The fundamental root cause of CVE-2026-28490 lies in how Authlib handles the results of the initial RSA decryption phase during JWE unwrapping. A classic Bleichenbacher padding oracle attack targets PKCS#1 v1.5 padding by observing whether a server accepts or rejects ciphertexts based on padding validity. To prevent this, cryptographic providers like Python's cryptography library employ a specific mitigation strategy. Upon encountering invalid padding, the provider does not raise an error but instead returns a randomized byte string matching the RSA modulus size.

Authlib's vulnerability surfaces immediately after receiving this decrypted output in the unwrap method located in authlib/jose/rfc7518/jwe_algs.py. The library performs a strict length check on the decrypted CEK, comparing it against the expected length for the negotiated symmetric algorithm. For standard configurations like A128GCM, the expected CEK length is exactly 16 bytes.

When the cryptography backend processes a token with invalid PKCS#1 v1.5 padding, it returns a large randomized string, typically 256 bytes for a 2048-bit RSA key. The Authlib length validation logic subsequently evaluates this 256-byte string against the expected 16-byte length. This check predictably fails, triggering a distinct ValueError exception.

The generation of this specific ValueError acts as an exception oracle. The attacker can differentiate between a ciphertext that failed PKCS#1 v1.5 padding validation and a ciphertext that possessed valid padding but failed subsequent symmetric tag validation. This precise binary feedback is the core requirement for executing a Bleichenbacher attack.

Code Analysis

The observable discrepancy is explicitly visible in the unwrapping logic where the ValueError is raised. The codebase trusts the output of the decryption operation and immediately applies conditional logic based on its length. The following block conceptualizes the vulnerable pattern identified in the library prior to version 1.6.9.

# Vulnerable Logic (Conceptual)
decrypted_cek = private_key.decrypt(encrypted_cek, padding.PKCS1v15())
if len(decrypted_cek) != expected_len:
    raise ValueError("Invalid cek length")

The fix implemented in commit 48b345f29f6c459f11c6a40162b6c0b742ef2e22 takes a decisive architectural approach. Rather than attempting to implement complex constant-time length validation in native Python, the maintainers opted to deprecate and disable the vulnerable RSA1_5 algorithm by default. The patch introduces a deprecated flag to the JWSAlgorithm and JWEAlgorithmBase models.

# authlib/jose/rfc7516/jwe.py
def get_header_alg(self, header):
    # ...
    alg = header["alg"]
    if alg not in self.ALG_REGISTRY:
        raise UnsupportedAlgorithmError()
 
    instance = self.ALG_REGISTRY[alg]
 
    # If no explicit whitelist is provided, block deprecated algorithms
    if self._algorithms is None:
        if instance.deprecated:
            raise UnsupportedAlgorithmError()
    elif alg not in self._algorithms:
        raise UnsupportedAlgorithmError()
    return instance

The modified algorithm selection logic explicitly raises an UnsupportedAlgorithmError if the requested algorithm is marked as deprecated and the user has not provided an explicit whitelist. While this resolves the vulnerability for default deployments, the underlying discrepancy remains in the codebase. Applications that manually whitelist RSA1_5 bypass this protection and reintroduce the oracle vulnerability.

Exploitation Methodology

Exploitation of CVE-2026-28490 requires the attacker to have network access to the target Authlib server and the ability to submit JWE tokens for processing. Authentication is generally not a prerequisite, as the vulnerable decryption routine occurs prior to identity validation or signature verification of the token payload. The attacker initiates the exploitation sequence by capturing a valid, encrypted JWE token destined for the target system.

The attacker then performs the initial setup for a Bleichenbacher attack. They mathematically mutate the encrypted CEK segment of the intercepted JWE token and submit the modified token to the application endpoint. The attacker meticulously records the server's HTTP response code, response time, and any error messages returned.

During the observation phase, the attacker relies entirely on the exception oracle. A ValueError or a corresponding 500 Internal Server Error indicates the PKCS#1 v1.5 padding was structurally invalid. Alternatively, a different error, such as an InvalidTag exception or a generic decryption failure, indicates the padding was mathematically valid but the decrypted symmetric key was incorrect.

By systematically analyzing the server's binary responses across tens of thousands of requests, the attacker iteratively narrows the mathematical space containing the plaintext CEK. Once the complete CEK is recovered, the attacker uses it to execute the standard symmetric decryption phase, successfully extracting the confidential JWE payload.

Impact Assessment

Successful exploitation of CVE-2026-28490 results in a complete loss of confidentiality for the data encapsulated within targeted JWE tokens. Depending on the application's specific implementation, JWE tokens frequently transport highly sensitive information. This payload often includes authenticated identity claims, administrative session identifiers, embedded access tokens, or proprietary business data.

The vulnerability is assessed with a CVSS v4.0 base score of 8.3 HIGH. The vector string CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N emphasizes the remote, unauthenticated nature of the attack (AV:N, PR:N) and the severe impact on data confidentiality (VC:H). The high attack complexity metric (AC:H) correctly reflects the substantial request volume and precise statistical analysis required to execute a Bleichenbacher oracle successfully.

While the primary impact is focused on confidentiality, data integrity may be indirectly affected in specific token architectures (VI:L). If the compromised token utilizes a symmetric signing scheme bound to the compromised CEK, the attacker may gain the ability to forge valid tokens. However, in standard asymmetric OAuth and OIDC deployments, the attacker achieves data disclosure without direct write access.

Remediation Strategies

The definitive remediation for CVE-2026-28490 is to update the Authlib dependency to version 1.6.9 or later. This release permanently marks the RSA1_5 algorithm as deprecated and explicitly removes it from the default algorithm processing pipeline. System administrators must ensure the package update propagates through all deployment environments and container images.

Developers must transition application architectures away from PKCS#1 v1.5 padding. Modern deployments should mandate secure key management algorithms such as RSA-OAEP, RSA-OAEP-256, or Elliptic Curve alternatives like ECDH-ES. These algorithms are fully supported natively by Authlib and provide robust mathematical protection against padding oracle side-channels.

For systems strictly requiring legacy RSA1_5 compatibility, operators must explicitly whitelist the algorithm within the Authlib configuration. Organizations taking this high-risk path must deploy aggressive compensating controls at the application perimeter. Specifically, robust rate limiting and strict WAF anomaly detection must be implemented to identify and block the high-volume request patterns indicative of a padding oracle probing cycle.

Official Patches

AuthlibFix Commit
AuthlibRelease Notes

Fix Analysis (1)

Technical Appendix

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

Affected Systems

Authlib Python LibraryPython Web Applications utilizing Authlib for OAuth/OIDC JWE processing

Affected Versions Detail

Product
Affected Versions
Fixed Version
authlib
Authlib
< 1.6.91.6.9
AttributeDetail
CWE IDCWE-203, CWE-327
Attack VectorNetwork
CVSS Base Score8.3
Authentication RequiredNone
Exploit StatusTheoretical / No public PoC
Confidentiality ImpactHigh

MITRE ATT&CK Mapping

T1600Weaken Encryption
Defensive Evasion
T1491Cryptographic Padding Oracle
Credential Access
CWE-203
Observable Discrepancy

The system produces different responses based on the validity of cryptographic padding, enabling an oracle attack.

Vulnerability Timeline

Vulnerability patched in GitHub repository
2026-02-25
CVE-2026-28490 published
2026-03-16
GitHub Security Advisory GHSA-7432-952r-cw78 released
2026-03-16

References & Sources

  • [1]GitHub Security Advisory GHSA-7432-952r-cw78
  • [2]CVE.org Record

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

•28 minutes ago•CVE-2026-70666
7.4

CVE-2026-70666: Server-Side Request Forgery in Netflix Lemur ACME Authority Management

CVE-2026-70666 is a critical Server-Side Request Forgery (SSRF) vulnerability in Netflix Lemur's ACME certificate management integration. Prior to version 1.9.3, the system allowed authority-role users to bypass initial ACME URL allowlist validations when updating an existing authority. Additionally, the underlying ACME network client blindly parsed and connected to dynamic endpoint URLs supplied in JSON responses from the configured ACME directory, allowing attackers to route arbitrary JWS-signed requests to internal services or cloud metadata endpoints.

Alon Barad
Alon Barad
1 views•5 min read
•about 1 hour ago•CVE-2026-70667
6.3

CVE-2026-70667: Server-Side Request Forgery Bypass in Netflix Lemur Certificate Verification

A security vulnerability in Netflix Lemur, a TLS certificate management framework, allows authenticated operators to bypass Server-Side Request Forgery (SSRF) mitigations. The issue exists within the certificate revocation verification workflow, specifically inside the CRL and OCSP retrieval logic. By exploiting HTTP redirects or DNS rebinding (Time-of-Check Time-of-Use) mechanisms, an attacker can coerce the server into issuing arbitrary network requests to internal services, such as the cloud instance metadata service (IMDS) or loopback addresses. This bypass neutralizes previous network-boundary validation logic and allows blind read/write SSRF targeting internal infrastructure resources.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 2 hours ago•CVE-2026-71303
7.7

CVE-2026-71303: Server-Side Request Forgery Bypass in Netflix Lemur Authority Updates

Netflix Lemur, an open-source TLS certificate management framework, is affected by a Server-Side Request Forgery (SSRF) vulnerability. This vulnerability arises from an incomplete patch for a previous security flaw, CVE-2026-55166. While Lemur version 1.9.2 validated the ACME directory URL against an allowlist during authority creation, it failed to perform the same checks when updating existing authorities. An authenticated user possessing an authority role can exploit this omission to replace the directory URL with internal or cloud metadata endpoints. During subsequent certificate issuance, the Lemur backend executes unauthorized requests, potentially leaking sensitive metadata or credentials.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 3 hours ago•CVE-2026-71307
7.7

CVE-2026-71307: Plaintext Credential Exposure in Netflix Lemur Destinations API

An authorization bypass and information disclosure vulnerability in Netflix Lemur before version 1.9.3 allows authenticated, low-privilege users to retrieve raw destination configurations, exposing plaintext credentials such as SFTP passwords and private key passphrases.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 4 hours ago•CVE-2026-71308
8.1

CVE-2026-71308: Missing Authorization and Lifecycle Hijacking in Netflix Lemur

Netflix Lemur before 1.9.3 contains a missing authorization vulnerability (CWE-862, CWE-639) when handling certificate creation, upload, or modification. Authenticated non-read-only users can manipulate the replaces parameter to silence expiration notifications and hijack certificate rotation tasks for arbitrary targets, leading to unauthorized TLS certificate deployment and traffic interception.

Alon Barad
Alon Barad
8 views•7 min read
•about 5 hours ago•CVE-2026-71317
6.5

CVE-2026-71317: Missing Authorization in Netflix Lemur Allows Unauthorized Subordinate CA Creation

CVE-2026-71317 is a critical Broken Object-Level Authorization (BOLA) / Missing Authorization vulnerability in Netflix Lemur versions prior to 1.9.3. When the self-service authority creation option is enabled (ADMIN_ONLY_AUTHORITY_CREATION = False), Lemur allows authenticated non-read-only users to request the creation of a subordinate Certificate Authority (sub-CA) chained to any internal parent authority, even if the requesting user lacks administrative or usage permissions over that parent CA. This allows attackers to generate subordinate CAs signed by trusted root certificates, exposing private keys and compromising the organizational PKI trust chain.

Alon Barad
Alon Barad
4 views•7 min read