Skip to main content

Authlib CVE-2026-114614

| EUVDEUVD-2026-108513 LOW
URL Redirection to Untrusted Site (Open Redirect) (CWE-601)
2026-10-22 GitHub_M GHSA-jj7h-c3hg-m23x
2.6
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Register public client via dynamic registration
  2. Delivery
    Submit http://localhost:80@attacker.example redirect URI
  3. Exploit
    Userinfo prefix bypasses is_secure_transport TLS guard
  4. Execution
    Victim initiates RP-initiated logout
  5. Impact
    Cleartext 302 redirect leaks state parameter

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V3 - Web Frontend Security Redirect URL validation
MITRE ATT&CK

1 technique across 1 tactic: 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 a deployment that relies on is_secure_transport() to reject cleartext non-loopback URLs supplied by an external party, on Authlib versions >=0.13 and <=1.7.2. The primary realistic path is an OpenID Provider with OIDC dynamic client registration AND RP-Initiated Logout enabled, where a public client (token_endpoint_auth_method 'none') registers a post_logout_redirect_uris entry of the form http://localhost:80@attacker.example/cb (also http://localhost:@attacker.example/, http://127.0.0.1:...@attacker.example/, http://[::1]:...@attacker.example/). A secondary path is a relying party calling AuthorizationServerMetadata.validate() on a discovery document the attacker can influence. Limiting factors: the dynamic-registration/RP-logout features are not enabled by default and must be configured; the end-user must actually initiate the logout flow (UI:R) for the redirect to fire; the flaw does not bypass OAuth redirect-URI exact matching and yields no token forgery or authentication bypass. The AUTHLIB_INSECURE_TRANSPORT env var is unrelated to the bypass.

Impact

This is a genuinely low-priority issue and the signals are consistent rather than conflicting. The CVSS 3.1 vector (AV:N/AC:H/PR:L/UI:R/S:U/C:L/I:N/A:N, base 2.6) and the vuln.today 'monitor' decision label both point to minor severity, matching the vendor's own framing of a defense-in-depth / spec-conformance failure. The attack is network-reachable but gated by high complexity (crafted userinfo URL plus a non-default provider configuration), low privileges, and required user interaction (the victim must initiate logout). Impact is limited to confidentiality (C:L - the OAuth 'state' value sent over cleartext) with no integrity or availability effect; the advisory explicitly states it does NOT bypass redirect-URI exact matching and does NOT forge tokens or authenticate users. There is no CISA KEV listing and no EPSS score in the supplied data, so there is no evidence of active exploitation; this is 'no public exploit identified' in the KEV sense, though a detailed proof-of-concept is published in the GHSA advisory. Net: a real, confirmed bug worth patching on a normal maintenance cadence, not an emergency.

Exploit ScenarioDerived

An OpenID Provider built on Authlib that enables OIDC dynamic client registration and RP-Initiated Logout lets a public client register a post_logout_redirect_uris value of http://localhost:80@attacker.example/cb; is_secure_transport() accepts it because the 'http://localhost:' prefix matches the userinfo component rather than the real host (evil/attacker.example), so when a victim later logs out the provider 302-redirects their browser to the attacker's cleartext endpoint carrying the state parameter. A working proof-of-concept is published in the GHSA advisory. The network vector with AC:H and UI:R means exploitation depends on the non-default config and on the user initiating logout.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.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

Authlib's is_secure_transport() TLS guard can be satisfied by a plain-HTTP URL whose userinfo component merely looks like a loopback host, so crafted values such as http://localhost:80@attacker.example/cb are treated as secure even though the parsed host is an external system. The flaw affects authlib versions 0.13 through 1.7.2 and matters where the check is trusted to reject externally supplied URLs - notably OIDC dynamic client registration combined with RP-Initiated Logout (where a public client can register a cleartext non-loopback post_logout_redirect_uris target) and relying parties that call AuthorizationServerMetadata.validate() on an attacker-influenced discovery document. Per the assessed vector (AV:N/AC:H/PR:L/UI:R) the outcome is limited to cleartext redirection and acceptance of cleartext endpoints with low confidentiality impact, requires configured features and end-user logout interaction, and does not bypass OAuth redirect-URI exact matching or forge tokens; a public PoC reference exists in the project's advisory, but it is not verified as working end-to-end exploit code, and there is no CISA KEV entry - the decision label is monitor.

RemediationAI

Vendor-released patch: Authlib 1.8.0 (commit 95ad1f90acf0c7b9cf2a8f25e6eb3f1135b8dc70), published at https://github.com/authlib/authlib/releases/tag/v1.8.0, with the advisory at https://github.com/authlib/authlib/security/advisories/GHSA-jj7h-c3hg-m23x; upgrade any installation in the 0.13 through 1.7.2 range. The patched function parses the URI with urlsplit() and accepts only https, or http with a parsed hostname of localhost or an address for which ipaddress.ip_address(...).is_loopback is true, so the loopback exemption no longer needs an explicit port. If upgrading is deferred, apply the advisory's guidance at the affected call sites: reject any URI whose parsed username or password is non-empty before passing it to OIDC RP-Initiated Logout registration, authorization-server metadata validation and end_session_endpoint checks, with the trade-off that legitimate loopback redirect URIs containing userinfo (unusual in practice) will also be refused; additionally restrict or disable dynamic client registration for public clients (token_endpoint_auth_method "none") where post_logout_redirect_uris are accepted, acknowledging that this removes a feature some OIDC deployments rely on for RP-Initiated Logout. Do not rely on the AUTHLIB_INSECURE_TRANSPORT environment variable as a mitigation, as it is unrelated to this bypass and globally disables the transport check.

Affected VersionsENISA

authlib < 1.8.0

Affected Packages

pypi authlib fix: 1.8.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

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

Technical ContextAI · show details

The weakness sits in authlib/common/security.py, where is_secure_transport() enforces the OAuth 2.0 / OIDC requirement that endpoints use TLS while allowing the RFC 8252 §7.3 exemption for loopback http:// URIs. The old implementation lower-cased the whole string and ran str.startswith() against a fixed tuple ("https://", "http://localhost:", "http://127.0.0.1:", "http://[::1]:"). Per RFC 3986 §3.2 an authority is [ userinfo "@" ] host [ ":" port ], so in http://localhost:80@evil.example/cb the userinfo is "localhost:80" and the host is evil.example; the raw prefix still matches, and the trailing colon intended to force a host:port shape is satisfied by the user:password separator. None of the consumers independently reject userinfo: authlib/oidc/rpinitiated/registration.py validates post_logout_redirect_uris after an is_valid_url() check that only requires a scheme and hostname; authlib/oauth2/rfc8414/models.py uses the same helper for issuer, authorization_endpoint, token_endpoint, jwks_uri, registration_endpoint, revocation_endpoint and introspection_endpoint; authlib/oidc/rpinitiated/discovery.py uses it for end_session_endpoint; and the rfc6749/rfc5849 error modules use it for redirect_uri rendering. The provided CWE is CWE-601 (URL redirection to an untrusted site), which matches the open-redirect consequence at the registration sink; the upstream advisory classifies the root cause as CWE-319/CWE-693 (cleartext transmission / improper restriction of operations within a security boundary). The fix in 1.8.0 replaces the prefix match with urlsplit() plus ipaddress.ip_address(...).is_loopback, returning True only for https, or for http with hostname localhost or a loopback IP, and drops the requirement for an explicit port; the commit also adds tests covering userinfo lookalikes, bracketed IPv6 forms and non-loopback IPs such as 0.0.0.0.

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 2.6 LOW
AV:N/AC:H/PR:L/UI:R/S:U/C:L/I:N/A:N
vuln.today AI 2.6 LOW

Network-reachable but needs a crafted userinfo URL plus non-default provider config (AC:H), a registered public client (PR:L), and victim-initiated logout (UI:R); only the cleartext state leak gives C:L, no I/A.

3.1 AV:N/AC:H/PR:L/UI:R/S:U/C:L/I:N/A:N
4.0 AV:N/AC:H/AT:N/PR:L/UI:A/VC:L/VI:N/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
Low
User Interaction
Required
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
None

Lifecycle Timeline

1
Patch available
Oct 22, 2026 - 22:03 EUVD

DescriptionCVE.org

Authlib is a Python library which builds OAuth and OpenID Connect servers. From 0.13 until 1.8.0, authlib.common.security.is_secure_transport() uses a textual prefix comparison for loopback HTTP exemptions, so a URL whose userinfo begins with a loopback host can be accepted even when its parsed host is an external non-loopback system. An external party able to supply a URL to OIDC RP-Initiated Logout registration, authorization-server metadata validation, or another call site can bypass the TLS-required guard and cause cleartext redirection or acceptance of cleartext endpoints. The issue does not bypass redirect URI exact matching and does not by itself forge tokens or authenticate users. The vulnerable authlib.common.security.is_secure_transport() implementation in authlib/common/security.py misinterprets the userinfo component before OIDC RP-Initiated Logout dynamic client registration and other consumers enforce transport security. This issue is fixed in version 1.8.0.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 24 pypi packages depend on authlib (18 direct, 6 indirect)

Ecosystem-wide dependent count for version 1.8.0.

Threat Intelligence Overview

EPSS Score
0.2%
Top 93% exploitable
Prevalence
Medium
popular Python OAuth/OIDC library, but not ubiquitous core infrastructure
Threat Intel
1
1 source
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 LOW
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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
Defer
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

13
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +13
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0
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-48990 MEDIUM POC
5.3 Jun 17

Resource exhaustion in joserfc (versions 1.3.4-1.6.5) is possible because the RFC7797 unencoded-payload (b64=false) JWS

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-116672 HIGH
8.8 Oct 27

Authlib 0.15 through 1.9.0 can let a party holding any valid RFC 7592 registration access token read, modify, or delete

CVE-2026-114616 HIGH
7.4 Oct 22

Token forgery in the Authlib Python library before 1.9.1 lets a remote, unauthenticated attacker mint HS256, HS384 or HS

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