Package Instance
Lookup for vulnerable packages by Package URL.
GET /api/packages/41557?format=api
{ "url": "http://public2.vulnerablecode.io/api/packages/41557?format=api", "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=api", "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=api", "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=api", "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=api", "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=api", "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=api", "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" }