{"url":"http://public2.vulnerablecode.io/api/packages/41557?format=json","purl":"pkg:pypi/authlib@1.0.0","type":"pypi","namespace":"","name":"authlib","version":"1.0.0","qualifiers":{},"subpath":"","is_vulnerable":true,"next_non_vulnerable_version":"1.6.11","latest_non_vulnerable_version":"1.6.11","affected_by_vulnerabilities":[{"url":"http://public2.vulnerablecode.io/api/vulnerabilities/37302?format=json","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":[{"reference_url":"https://github.com/authlib/authlib/security/advisories/GHSA-jj8c-mmj3-mmgv","reference_id":"","reference_type":"","scores":[{"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":[{"url":"http://public2.vulnerablecode.io/api/packages/49680?format=json","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"},{"url":"http://public2.vulnerablecode.io/api/vulnerabilities/49616?format=json","vulnerability_id":"VCID-pguz-hqre-77ac","summary":"Authlib has 1-click Account Takeover vulnerability\nCache-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]\n\n```py\ndef _get_cache_data(self, key):\nvalue = self.cache.get(key)\nif not value:\nreturn None\ntry:\nreturn json.loads(value)\nexcept (TypeError, ValueError):\nreturn None\n[snip]\ndef get_state_data(self, session, state):\nkey = f\"_state_{self.name}_{state}\"\nif self.cache:\nvalue = self._get_cache_data(key)\nelse:\nvalue = session.get(key)\nif value:\nreturn value.get(\"data\")\nreturn None\n```\n\n*authlib/integrations/base_client/framework_integration.py:12-41*\n\nRetrieval 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]\n\n```py\ndef authorize_access_token(self, **kwargs):\n\"\"\"Fetch access token in one step.\n\n:return: A token dict.\n\"\"\"\nparams = request.args.to_dict(flat=True)\nstate = params.get(\"oauth_token\")\nif not state:\nraise OAuthError(description='Missing \"oauth_token\" parameter')\n\ndata = self.framework.get_state_data(session, state)\nif not data:\nraise OAuthError(description='Missing \"request_token\" in temporary data')\n\nparams[\"request_token\"] = data[\"request_token\"]\nparams.update(kwargs)\nself.framework.clear_state_data(session, state)\ntoken = self.fetch_access_token(**params)\nself.token = token\nreturn token\n```\n\n*authlib/integrations/flask_client/apps.py:57-76*\n\nThis 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":[{"reference_url":"https://github.com/authlib/authlib","reference_id":"","reference_type":"","scores":[],"url":"https://github.com/authlib/authlib"},{"reference_url":"https://github.com/authlib/authlib/commit/2808378611dd6fb2532b189a9087877d8f0c0489","reference_id":"","reference_type":"","scores":[],"url":"https://github.com/authlib/authlib/commit/2808378611dd6fb2532b189a9087877d8f0c0489"},{"reference_url":"https://github.com/authlib/authlib/commit/7974f45e4d7492ab5f527577677f2770ce423228","reference_id":"","reference_type":"","scores":[],"url":"https://github.com/authlib/authlib/commit/7974f45e4d7492ab5f527577677f2770ce423228"},{"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"},{"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"},{"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":[{"url":"http://public2.vulnerablecode.io/api/packages/49675?format=json","purl":"pkg:pypi/authlib@1.6.6","is_vulnerable":true,"affected_by_vulnerabilities":[{"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"},{"url":"http://public2.vulnerablecode.io/api/vulnerabilities/36812?format=json","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":[{"reference_url":"https://github.com/lepture/authlib/issues/654","reference_id":"","reference_type":"","scores":[],"url":"https://github.com/lepture/authlib/issues/654"}],"fixed_packages":[{"url":"http://public2.vulnerablecode.io/api/packages/41563?format=json","purl":"pkg:pypi/authlib@1.3.1","is_vulnerable":true,"affected_by_vulnerabilities":[{"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_score":null,"resource_url":"http://public2.vulnerablecode.io/packages/pkg:pypi/authlib@1.0.0"}