Lemur: JWT verifier honors attacker-supplied alg, enabling ATO (CVE-2026-55165)
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.
AI Analysis
Technical Summary
Lemur's JWT verifier in versions before 1.9.2 reads the 'alg' field from the JWT header without verifying it, passing this attacker-controlled value to the token decoding function. While PyJWT 2.x rejects 'alg=none' with the configured key, this behavior creates a defense-in-depth gap that could be exploited after migrating to asymmetric signing due to algorithm confusion. It also undermines algorithm-based anomaly detection since the token specifies the algorithm used. The vulnerability is addressed in Lemur 1.9.2 by enforcing a server-controlled allowlist of JWT algorithms, defaulting to HS256.
Potential Impact
The vulnerability allows an attacker to influence the JWT verification algorithm, weakening security checks and potentially enabling account takeover (ATO) if combined with other conditions such as disclosure of the LEMUR_TOKEN_SECRET. The flaw itself does not directly bypass authentication in the default configuration but reduces the effectiveness of anomaly detection and could become exploitable after asymmetric-signing migration.
Mitigation Recommendations
Upgrade Lemur to version 1.9.2 or later, which introduces a server-controlled allowlist for JWT algorithms (LEMUR_TOKEN_ALGORITHMS) defaulting to HS256. This fix prevents attacker-supplied algorithms from being honored during token verification. No other mitigations are necessary if the upgrade is applied.
Lemur: JWT verifier honors attacker-supplied alg, enabling ATO (CVE-2026-55165)
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 v3.1
Score 4.8medium
Affected software
Run on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
Weaknesses
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
Lemur's JWT verifier in versions before 1.9.2 reads the 'alg' field from the JWT header without verifying it, passing this attacker-controlled value to the token decoding function. While PyJWT 2.x rejects 'alg=none' with the configured key, this behavior creates a defense-in-depth gap that could be exploited after migrating to asymmetric signing due to algorithm confusion. It also undermines algorithm-based anomaly detection since the token specifies the algorithm used. The vulnerability is addressed in Lemur 1.9.2 by enforcing a server-controlled allowlist of JWT algorithms, defaulting to HS256.
Potential Impact
The vulnerability allows an attacker to influence the JWT verification algorithm, weakening security checks and potentially enabling account takeover (ATO) if combined with other conditions such as disclosure of the LEMUR_TOKEN_SECRET. The flaw itself does not directly bypass authentication in the default configuration but reduces the effectiveness of anomaly detection and could become exploitable after asymmetric-signing migration.
Mitigation Recommendations
Upgrade Lemur to version 1.9.2 or later, which introduces a server-controlled allowlist for JWT algorithms (LEMUR_TOKEN_ALGORITHMS) defaulting to HS256. This fix prevents attacker-supplied algorithms from being honored during token verification. No other mitigations are necessary if the upgrade is applied.
Technical Details
- Gcve Source
- db.gcve.eu
- Osv Id
- GHSA-r9gp-7f88-9r54
- Osv Schema Version
- 1.4.0
- Aliases
- ["CVE-2026-55165"]
- Ecosystems
- ["PyPI"]
- Database Specific Severity
- MODERATE
- Cvss Version
- 3.1
Threat ID: 6a3ef7e527e9c79719032b3d
Added to database: 06/26/2026, 22:06:29 UTC
Last enriched: 08/19/2026, 11:14:13 UTC
Last updated: 09/10/2026, 19:36:54 UTC
Views: 107
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.