CVE-2026-55165
Received Received - Intake

JWT Algorithm Confusion in Lemur Prior to 1.9.2

Vulnerability report for CVE-2026-55165, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-08-18

Last updated on: 2026-08-18

Assigner: GitHub, Inc.

Description

Lemur manages TLS certificate creation. Prior to 1.9.2, the JWT verifier in lemur/auth/service.py:130-137 used fetch_token_header to read header_data["alg"] from an unverified token and passed that attacker-controlled value to decode_with_multiple_secrets. PyJWT 2.x rejects alg=none with the configured key, so the flaw is a defense-in-depth gap rather than a direct authentication bypass in the shipped configuration. The unpinned algorithm can become exploitable after an asymmetric-signing migration through algorithm confusion, and it weakens algorithm-based anomaly detection because the token chooses the recorded value. A separate disclosure of LEMUR_TOKEN_SECRET would also permit forged HS256 tokens, although that disclosure is an independent prerequisite. The fix introduces the server-controlled LEMUR_TOKEN_ALGORITHMS allowlist and defaults it to HS256. This issue is fixed in version 1.9.2.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-08-18
Last Modified
2026-08-18
Generated
2026-08-18
AI Q&A
2026-08-18
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 1 associated CPE
Vendor Product Version / Range
lemur lemur 1.9.2

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-347 The product does not verify, or incorrectly verifies, the cryptographic signature for data.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability involves Lemur's JWT verifier trusting the algorithm specified in a token header instead of enforcing a server-pinned algorithm. The flaw allows an attacker to manipulate the algorithm choice, potentially leading to authorization bypass or algorithm confusion attacks. The issue is mitigated in PyJWT 2.x but could become exploitable if PyJWT changes or if the deployment downgrades.

Detection Guidance

To detect this vulnerability, check if your Lemur instance is running a version prior to 1.9.2. Use the command: lemur --version. If the version is less than 1.9.2, the system is vulnerable. Additionally, inspect the JWT token handling in lemur/auth/service.py for lines 130-137 where header_data['alg'] is used without server-side algorithm pinning.

Verify if the LEMUR_TOKEN_ALGORITHMS configuration exists and defaults to HS256. Check configuration files or environment variables for this setting. If missing or misconfigured, the vulnerability likely exists.

Impact Analysis

This vulnerability could allow an attacker to bypass authentication or perform account takeover if combined with a separate secret disclosure issue. It also weakens algorithm-based anomaly detection and could enable algorithm confusion attacks like RS256 to HS256 confusion, where an attacker forges tokens using an asymmetric public key as an HMAC secret.

Mitigation Strategies

Upgrade Lemur to version 1.9.2 or later immediately. This version introduces the LEMUR_TOKEN_ALGORITHMS allowlist, defaulting to HS256, which prevents algorithm confusion attacks.

Ensure the LEMUR_TOKEN_ALGORITHMS setting is configured to restrict allowed algorithms to HS256. Add or update this setting in your configuration to enforce server-side algorithm pinning.

Rotate any exposed LEMUR_TOKEN_SECRET if there is suspicion of compromise. This secret, if disclosed, could allow forged HS256 tokens even with the fix applied.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-55165. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart