Lookup for vulnerable packages by Package URL.

Purlpkg:pypi/authlib@1.0.0
Typepypi
Namespace
Nameauthlib
Version1.0.0
Qualifiers
Subpath
Is_vulnerabletrue
Next_non_vulnerable_version1.6.11
Latest_non_vulnerable_version1.6.11
Affected_by_vulnerabilities
0
url VCID-hrf7-xz6n-efcg
vulnerability_id VCID-hrf7-xz6n-efcg
summary Authlib is a Python library which builds OAuth and OpenID Connect servers. Prior to 1.6.11, there is no CSRF protection on the cache feature in authlib.integrations.starlette_client.OAuth. This vulnerability is fixed in 1.6.11.
references
0
reference_url https://github.com/authlib/authlib/security/advisories/GHSA-jj8c-mmj3-mmgv
reference_id
reference_type
scores
0
value 5.4
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N
url https://github.com/authlib/authlib/security/advisories/GHSA-jj8c-mmj3-mmgv
fixed_packages
0
url pkg:pypi/authlib@1.6.11
purl pkg:pypi/authlib@1.6.11
is_vulnerable false
affected_by_vulnerabilities
resource_url http://public2.vulnerablecode.io/packages/pkg:pypi/authlib@1.6.11
aliases CVE-2026-41425, GHSA-jj8c-mmj3-mmgv, PYSEC-2026-25
risk_score null
exploitability null
weighted_severity null
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-hrf7-xz6n-efcg
1
url VCID-pguz-hqre-77ac
vulnerability_id VCID-pguz-hqre-77ac
summary
Authlib has 1-click Account Takeover vulnerability
Cache-backed state/request-token storage is not tied to the initiating user session, making CSRF possible for any attacker that possesses a valid state value (easily obtainable via an attacker-initiated authentication flow). When a cache is supplied to the OAuth client registry, `FrameworkIntegration.set_state_data` writes the entire state blob under `_state_{app}_{state}`, and `get_state_data` disregards the caller's session entirely. [1][2]

```py
def _get_cache_data(self, key):
value = self.cache.get(key)
if not value:
return None
try:
return json.loads(value)
except (TypeError, ValueError):
return None
[snip]
def get_state_data(self, session, state):
key = f"_state_{self.name}_{state}"
if self.cache:
value = self._get_cache_data(key)
else:
value = session.get(key)
if value:
return value.get("data")
return None
```

*authlib/integrations/base_client/framework_integration.py:12-41*

Retrieval in `authorize_access_token` therefore succeeds for whichever browser presents that opaque value, and the token exchange proceeds with the attacker's authorization code. [3]

```py
def authorize_access_token(self, **kwargs):
"""Fetch access token in one step.

:return: A token dict.
"""
params = request.args.to_dict(flat=True)
state = params.get("oauth_token")
if not state:
raise OAuthError(description='Missing "oauth_token" parameter')

data = self.framework.get_state_data(session, state)
if not data:
raise OAuthError(description='Missing "request_token" in temporary data')

params["request_token"] = data["request_token"]
params.update(kwargs)
self.framework.clear_state_data(session, state)
token = self.fetch_access_token(**params)
self.token = token
return token
```

*authlib/integrations/flask_client/apps.py:57-76*

This opens up an avenue for Login CSRF in applications that use cache-backed storage. Depending on the dependent application's implementation (e.g., whether it links accounts in the event of a login CSRF), this could lead to account takeover.
references
0
reference_url https://github.com/authlib/authlib
reference_id
reference_type
scores
url https://github.com/authlib/authlib
1
reference_url https://github.com/authlib/authlib/commit/2808378611dd6fb2532b189a9087877d8f0c0489
reference_id
reference_type
scores
url https://github.com/authlib/authlib/commit/2808378611dd6fb2532b189a9087877d8f0c0489
2
reference_url https://github.com/authlib/authlib/commit/7974f45e4d7492ab5f527577677f2770ce423228
reference_id
reference_type
scores
url https://github.com/authlib/authlib/commit/7974f45e4d7492ab5f527577677f2770ce423228
3
reference_url https://nvd.nist.gov/vuln/detail/CVE-2025-68158
reference_id CVE-2025-68158
reference_type
scores
url https://nvd.nist.gov/vuln/detail/CVE-2025-68158
4
reference_url https://github.com/advisories/GHSA-fg6f-75jq-6523
reference_id GHSA-fg6f-75jq-6523
reference_type
scores
url https://github.com/advisories/GHSA-fg6f-75jq-6523
5
reference_url https://github.com/authlib/authlib/security/advisories/GHSA-fg6f-75jq-6523
reference_id GHSA-fg6f-75jq-6523
reference_type
scores
url https://github.com/authlib/authlib/security/advisories/GHSA-fg6f-75jq-6523
fixed_packages
0
url pkg:pypi/authlib@1.6.6
purl pkg:pypi/authlib@1.6.6
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-hrf7-xz6n-efcg
resource_url http://public2.vulnerablecode.io/packages/pkg:pypi/authlib@1.6.6
aliases CVE-2025-68158, GHSA-fg6f-75jq-6523
risk_score null
exploitability null
weighted_severity null
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-pguz-hqre-77ac
2
url VCID-tk6q-528z-rye4
vulnerability_id VCID-tk6q-528z-rye4
summary lepture Authlib before 1.3.1 has algorithm confusion with asymmetric public keys. Unless an algorithm is specified in a jwt.decode call, HMAC verification is allowed with any asymmetric public key. (This is similar to CVE-2022-29217 and CVE-2024-33663.)
references
0
reference_url https://github.com/lepture/authlib/issues/654
reference_id
reference_type
scores
url https://github.com/lepture/authlib/issues/654
fixed_packages
0
url pkg:pypi/authlib@1.3.1
purl pkg:pypi/authlib@1.3.1
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-hrf7-xz6n-efcg
resource_url http://public2.vulnerablecode.io/packages/pkg:pypi/authlib@1.3.1
aliases CVE-2024-37568, PYSEC-2024-52
risk_score null
exploitability null
weighted_severity null
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-tk6q-528z-rye4
Fixing_vulnerabilities
Risk_scorenull
Resource_urlhttp://public2.vulnerablecode.io/packages/pkg:pypi/authlib@1.0.0