{"id":"CVE-2026-118669","kind":"vulnerability","aliases":["CVE-2026-118669"],"related":[],"title":"OAuthLib: client identity mismatch lets clients obtain unauthorized tokens","description":"OAuthLib is an implementation of the OAuth request-signing logic for Python 3.6+. Prior to 4.0.0, the client_credentials and Resource Owner Password Credentials token grant handlers can authenticate request.client as one confidential client while retaining an attacker-supplied request.client_id for validate_grant_type and validate_scopes. A lower-privilege authenticated client can therefore cause grant and scope authorization to use another client's identity when an application validator relies on the documented client_id argument, potentially issuing tokens with unauthorized grants or scopes. Validators that authorize exclusively from request.client may not be affected. This issue is fixed in version 4.0.0.","summary":"OAuthLib's client_credentials and password grant handlers can authenticate one client while checking grant type and scopes against an attacker-supplied client_id. A lower-privilege authenticated client can therefore obtain tokens with grants or scopes it should not have.","severity":"high","cvss":8.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["oauth-provider","oauthlib","package","python"],"not_affected_if":["auth-required-only-for-trusted-clients","no-client-credentials-grant","no-password-grant","request-client-validators"],"how_to_check":"- Check the installed OAuthLib version with `pip show oauthlib` or `pip freeze | grep -i oauthlib`\n- Look for a `validate_grant_type` or `validate_scopes` implementation that reads `request.client_id` instead of `request.client`","fix":"- Upgrade OAuthLib to `4.0.0` or later\n- Until upgraded, make validators authorize from `request.client` rather than `request.client_id`","status":"open","published_at":"2026-10-28T22:17:12+00:00","first_seen_at":"2026-10-28T22:35:34+00:00","triaged_at":"2026-10-28T22:36:41+00:00","updated_at":"2026-10-28T22:36:41+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-28T22:36:41Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade OAuthLib to `4.0.0` or later\n- Until upgraded, make validators authorize from `request.client` rather than `request.client_id`","reach":"internet","title":"OAuthLib: client identity mismatch lets clients obtain unauthorized tokens","impact":"high","summary":"OAuthLib's client_credentials and password grant handlers can authenticate one client while checking grant type and scopes against an attacker-supplied client_id. A lower-privilege authenticated client can therefore obtain tokens with grants or scopes it should not have.","category":"package","nicknames":[],"who_cares":["python","oauth-provider","oauthlib"],"confidence":0.7,"needs_auth":"yes","worst_case":"Authenticated low-privilege client obtains tokens with unauthorized scopes","analyst_note":"Check the NVD entry and the OAuthLib 4.0.0 release notes or commit for the exact validator behavior and any workaround guidance.","how_to_check":"- Check the installed OAuthLib version with `pip show oauthlib` or `pip freeze | grep -i oauthlib`\n- Look for a `validate_grant_type` or `validate_scopes` implementation that reads `request.client_id` instead of `request.client`","needs_analyst":true,"not_affected_if":["auth-required-only-for-trusted-clients","request-client-validators","no-client-credentials-grant","no-password-grant"],"who_is_affected":"Applications that use OAuthLib as an OAuth 2.0 provider with client_credentials or Resource Owner Password Credentials grants, and whose validators rely on the client_id argument, are exposed. Validators that authorize only from request.client are reportedly not affected, and services that do not run an OAuthLib-based token server can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000667,"input_tokens":3434,"output_tokens":648,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-118669':12A,15A '-2026':11A,14A '3.6':74C '4.0.0':77C,165C 'affect':158C 'anoth':126C 'applic':132C 'argument':140C 'attack':43B,100C 'attacker-suppli':42B,99C 'authent':31B,51B,90C,115C 'author':123C,151C 'caus':119C 'check':35B 'client':2A,6A,24B,33B,45B,52B,79C,95C,116C,127C,138C 'confidenti':94C 'credenti':25B,80C,85C 'cve':10A,13A 'document':137C 'exclus':152C 'fix':162C 'grant':28B,36B,58B,87C,106C,120C,146C 'handler':29B,88C 'id':46B,103C,139C 'ident':3A,129C 'implement':64C 'issu':142C,160C 'let':5A 'logic':71C 'lower':49B,113C 'lower-privileg':48B,112C 'may':155C 'mismatch':4A 'oauth':17B,67C 'oauth-provid':16B 'oauthlib':1A,19B,22B,61C 'obtain':7A,55B 'one':32B,93C 'owner':83C 'packag':20B 'password':27B,84C 'potenti':141C 'prior':75C 'privileg':50B,114C 'provid':18B 'python':21B,73C 'reli':134C 'request':69C 'request-sign':68C 'request.client':91C,102C,154C 'resourc':82C 'retain':97C 'scope':39B,60B,110C,122C,148C 'sign':70C 'suppli':44B,101C 'therefor':54B,118C 'token':9A,56B,86C,143C 'type':37B,107C 'unauthor':8A,145C 'use':125C 'valid':105C,109C,133C,149C 'version':164C","nicknames":[],"mitigations":[],"who_affected":"Applications that use OAuthLib as an OAuth 2.0 provider with client_credentials or Resource Owner Password Credentials grants, and whose validators rely on the client_id argument, are exposed. Validators that authorize only from request.client are reportedly not affected, and services that do not run an OAuthLib-based token server can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-28T22:17:12+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:H/SI:H/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-118669","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-118669","severity":null,"published_at":"2026-10-28T22:17:12+00:00","modified_at":"2026-10-28T22:17:12+00:00","first_seen_at":"2026-10-28T22:35:34+00:00","fetched_at":"2026-10-28T22:35:34+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}