---
id: "CVE-2026-114619"
kind: "vulnerability"
aliases: ["CVE-2026-114619"]
title: "Authlib: implicit grant lets clients obtain ID tokens without openid scope"
severity: "medium"
cvss: 4.6
epss: 0.00157
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["authlib", "oidc", "package", "python"]
not_affected_if: ["authorization-code-flow-only", "openid-scope-for-all-clients"]
published_at: "2026-10-22T22:18:04+00:00"
first_seen_at: "2026-10-23T21:57:32+00:00"
updated_at: "2026-10-25T04:35:25+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-114619", "first_seen_at": "2026-10-23T21:57:32+00:00"}, {"source": "epss", "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-114619", "first_seen_at": "2026-10-24T07:15:51+00:00"}]
---

# Authlib: implicit grant lets clients obtain ID tokens without openid scope

Authlib before 1.9.0 checks the raw client-supplied scope instead of the filtered scope in its OpenID implicit grant. A registered client that may request ID tokens but not the openid scope can add openid, get user consent, and receive a signed ID token with the user's subject and allowed profile claims.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed version with `pip show authlib` and compare it to `1.9.0`.
- Look for OpenID implicit flow use (response_type including `id_token`) in the authorization server code.
- Check whether any registered client allows `id_token` without allowing the `openid` scope.

## Fix

- Upgrade Authlib to `1.9.0` or later.
- Until upgraded, allow `openid` only for clients that should receive ID tokens, or stop offering the implicit ID token response type.

## Timeline

- 2026-10-23T21:57:32+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-114619
- 2026-10-24T07:15:51+00:00 epss https://api.first.org/data/v1/epss?cve=CVE-2026-114619

## From the sources

Authlib is a Python library which builds OAuth and OpenID Connect servers. Prior to 1.9.0, OpenIDImplicitGrant.validate_authorization_request() checks the client-controlled raw request.payload.scope for openid after the parent grant has filtered allowed scopes into request.scope. A registered client permitted an ID token response type but not the openid scope can add openid to the request, obtain user consent, and receive a signed ID token containing the user's subject and allowed profile claims. Authorization code flow and deployments that allow openid for every client permitted an ID token response are not affected. In authlib/oidc/core/grants/implicit.py, OpenIDImplicitGrant.validate_authorization_request() checks request.payload.scope instead of the filtered request.scope. This issue is fixed in version 1.9.0.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
