Skip to main content

Authlib CVE-2026-114616

| EUVDEUVD-2026-108517 HIGH
Improper Authentication (CWE-287)
2026-10-22 GitHub_M
7.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify Authlib verifier resolving empty HMAC secret
  2. Exploit
    Craft JWT with arbitrary attacker claims
  3. Execution
    Compute deterministic HS256 signature with empty key
  4. Impact
    Submit forged token for authenticated access

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication mechanism validation
MITRE ATT&CK

2 techniques across 2 tactics: Defense Evasion, Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires the deploying Authlib-based verifier to resolve its symmetric (oct) HMAC verification key to an empty string or empty bytes at runtime - for example os.environ.get('JWT_SECRET', ''), a config/database value whose default is '', or a key-resolver returning '' on a lookup miss - and the token must use an HMAC algorithm (HS256, HS384 or HS512). Under those conditions a remote unauthenticated attacker (PR:N) can forge valid tokens, because OctKey.import_key/validate_raw_key in versions <1.9.1 perform only a type check and never reject zero-length material, so hmac.new(b'', ...) yields a publicly reproducible digest. The key LIMITING factor (reflected in AC:H) is that this is NOT a default-configuration flaw: applications that always supply a non-empty secret are not exploitable, and asymmetric (RS/ES) verification paths are unaffected.

Impact

This is a genuine authentication-bypass flaw but one whose real-world risk is strongly gated by a deployment precondition rather than being universally exploitable. The supplied CVSS vector (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N) correctly captures this: network reach, no privileges and no user interaction, but AC:H because exploitation requires the victim application to verify tokens with a zero-length HMAC secret. Note a data conflict: the input header lists CVSS 7.4 while the GHSA advisory and the provided vector compute to 8.1 - the vector string, not the 7.4 base figure, governs this analysis. No EPSS score and no KEV listing are present in the input, and the vuln.today decision label is 'this_week' (not act_now/emergency), so there is no signal of active or widespread exploitation; this is a serious but not emergency-grade item. A public PoC reference exists in the GHSA advisory and the fix-commit test, but it is a conceptual/prose reproduction, not verified weaponized exploit code. The decisive variable is configuration: applications that always load a real secret are not affected, so defenders should prioritize auditing their Authlib secret-resolution paths rather than treating every Authlib deployment as exposed.

Exploit ScenarioDerived

An OAuth 2.0 resource server or OIDC relying party built on Authlib resolves its HMAC verification secret from a source that can be empty at runtime - e.g. os.environ.get('JWT_SECRET', ''), a config/DB column defaulting to '', or a key resolver that returns '' on a miss. A remote unauthenticated attacker crafts a JWT with arbitrary claims (elevated scopes or another user's subject), computes the deterministic HS256/384/512 signature using an empty key, and Authlib accepts the forged token as authentic. The GHSA advisory documents a prose reproduction and the fix commit adds a forging test, but no weaponized exploit is published.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 22, 2026

Token forgery in the Authlib Python library before 1.9.1 lets a remote, unauthenticated attacker mint HS256, HS384 or HS512 tokens carrying arbitrary claims that Authlib accepts as genuinely signed, whenever the deploying application's HMAC verification key resolves to an empty string or empty bytes (for example an unset environment variable defaulted to '', a config column defaulting to '', or a key-resolver returning '' on a lookup miss). The exposure is strongly gated by that deployment precondition: applications that always supply a non-empty secret are not exploitable, and asymmetric RS/ES verification paths are unaffected, which is why the vector carries AC:H rather than a universally applicable rating. No public exploit code has been identified at time of analysis (the advisory supplies a prose reproduction description rather than weaponized code), CISA KEV does not list this issue, and the vendor has released 1.9.1 as the fix.

RemediationAI

Vendor-released patch: upgrade to Authlib 1.9.1 (release tag v1.9.1), which adds a check in OctKey.import_key raising ValueError("oct key material must not be empty") before any key reaches hmac.new, and which raises the minimum dependency to joserfc>=1.6.8 - the same guard the maintainer's joserfc library already implements, so deployments pinning joserfc should move to 1.6.8 or later as well. The advisory and commit are at https://github.com/authlib/authlib/security/advisories/GHSA-8m4g-j4wp-wgcg and https://github.com/authlib/authlib/commit/4ff30db442c70e29486e1982cb0ad37c037f5f4b. Because the flaw only manifests when the application resolves its HMAC key to an empty value, the complementary control is to make key resolution fail closed: ensure the secret lookup cannot return '' or b'' (no os.environ.get('JWT_SECRET', '') defaults, no config columns defaulting to empty, no resolver returning '' on a miss) and abort startup or reject the request if the resolved key is zero-length. The trade-off is that strict startup validation will hard-fail misconfigured deployments that previously started and silently accepted forged tokens, which is the intended behavior but must be staged into rollouts; applications that verify only with asymmetric RS/ES keys are unaffected by the vulnerable code path and need the library upgrade only for hygiene.

Affected VersionsENISA

authlib < 1.9.1

Affected Packages

euvd authlib fix: 1.9.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The defect sits in Authlib's JOSE layer, in authlib/jose/rfc7518/oct_key.py and authlib/jose/rfc7518/jws_algs.py, and is classified primarily as CWE-287 (Improper Authentication) with CWE-326 (Inadequate Encryption Strength) and CWE-1391 (Use of Weak Credentials) as related weaknesses. OctKey.validate_raw_key performs only a type check (isinstance(key, bytes)) and OctKey.import_key rejects solely material beginning with known unsafe PEM/SSH prefixes, so a zero-length b'' or '' passes every gate; get_op_key then returns the raw key without any length validation. HMACAlgorithm.prepare_key calls OctKey.import_key, and sign/verify feed the resulting op key straight into hmac.new(op_key, msg, hash_alg) and hmac.compare_digest. With an empty key this degrades to hmac.new(b'', ...), producing a deterministic digest that any party can reproduce because the key contributes no secret entropy - hence a valid-looking signature for arbitrary header and payload. RFC 7518 section 3.2 requires an HMAC key at least as long as the hash output, and the upstream fix adds exactly that guard. This is a member of a cross-language empty-HMAC-key family already assigned CVE-2026-44351 (fast-jwt, npm) and CVE-2026-45363 (ruby-jwt, RubyGems), and it is distinct from Authlib's earlier JWT advisories - CVE-2026-27962/GHSA-wvwj-cvrp-7pv5 (JWS JWK header injection, the key=None case), CVE-2026-28802/GHSA-7wc2-qxgw-g8gg (alg:none blank-signature bypass) and GHSA-5357-c2jx-v7qh (asymmetric/symmetric algorithm confusion) - none of which reject zero-length oct material. The maintainer's newer joserfc library already raises ValueError on empty oct material and warns below 112 bits, PyJWT raises InvalidKeyError for zero-length HMAC keys, and jwcrypto enforces an RFC 7518 minimum length; the guard was simply missing from the older, far more widely deployed Authlib rfc7518 package.

Know when Authlib gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 7.4 HIGH
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
vuln.today AI 7.4 HIGH

AV:N and PR:N as the attacker is remote and unauthenticated; AC:H because exploitation depends on the target application verifying with an empty secret; C:H/I:H for full token forgery, A:N as availability is unaffected.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

2
Patch available
Oct 22, 2026 - 22:03 EUVD
CVE Published
Oct 22, 2026 - 21:14 cve.org
HIGH 7.4

DescriptionCVE.org

Authlib is a Python library which builds OAuth and OpenID Connect servers. Prior to 1.9.1, Authlib's OctKey.import_key() and HMAC signing and verification path accept zero-length key material. If an application's secret lookup can return an empty string or empty bytes, a remote attacker can compute the deterministic HS256, HS384, or HS512 signature for arbitrary token claims and have Authlib treat the token as authentic. This issue is fixed in version 1.9.1.

Technical POC Analysis

CWE-287 (Improper Authentication), with CWE-326 and CWE-1391 as secondary classifications.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

CVE-2026-114616 is a high-severity flaw in the Authlib Python library (versions before 1.9.1) that allows token forgery when an application's HMAC secret is empty, potentially enabling unauthorized access to systems relying on Authlib for authentication. Leadership should prioritize remediation because affected applications with misconfigured secrets could be compromised, though the risk is significantly lower for properly configured deployments.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 89% exploitable
Prevalence
Medium
popular Python OAuth/OIDC library, widely used as an application dependency
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

37
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +37
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

CVE-2025-68158 HIGH POC
8.8 Jan 08

Authlib is a Python library which builds OAuth and OpenID Connect servers. [CVSS 5.7 MEDIUM]

CVE-2026-28802 HIGH POC
7.7 Mar 06

Authentication bypass in Authlib (Python OAuth/OpenID Connect library) versions 1.6.5 through 1.6.6 allows remote attack

CVE-2025-59420 HIGH POC
7.5 Sep 22

Authlib is a Python library which builds OAuth and OpenID Connect servers. Rated high severity (CVSS 7.5), this vulnerab

CVE-2025-61920 HIGH POC
7.5 Oct 10

Authlib's JOSE/JWS verification path (through 1.6.4, with 1.6.5 as the fix) decodes attacker-supplied JWT/JWS header and

CVE-2024-37568 HIGH POC
7.5 Jun 09

lepture Authlib before 1.3.1 has algorithm confusion with asymmetric public keys. Rated high severity (CVSS 7.5), this v

CVE-2025-62706 MEDIUM POC
6.5 Oct 22

Unbounded DEFLATE decompression in Authlib's JWE zip=DEF handling (authlib/jose/rfc7518/jwe_zips.py) lets a small, valid

CVE-2026-96760 CRITICAL
9.8 Sep 28

Signature verification bypass in Authlib 1.7.2 and earlier allows unauthenticated remote attackers to have crafted JWS J

CVE-2026-104056 CRITICAL
9.8 Oct 01

Poisoned OAuth/OIDC discovery metadata in Authlib 1.7.2 and earlier allows an attacker who controls or intercepts the me

CVE-2026-102946 CRITICAL
9.1 Oct 15

Authentication bypass in the joserfc Python library before 1.7.4 lets remote, unauthenticated attackers submit a JWS Gen

CVE-2026-114615 HIGH
7.4 Oct 22

Authentication bypass in Authlib's deprecated-but-still-shipped authlib.jose module (1.3.1 through 1.8.0, fixed in 1.9.0

CVE-2026-114618 MEDIUM
6.8 Oct 22

Authlib's default RFC 7523 JWT bearer grant, in all releases prior to 1.9.0, fails to bind an incoming JWT assertion to

CVE-2026-114620 MEDIUM
5.4 Oct 22

Server-side request forgery in Authlib's RFC 9101 JWTAuthenticationRequest (JAR) extension lets unauthenticated remote a

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy