{"id":"CVE-2026-114615","kind":"vulnerability","aliases":["CVE-2026-114615"],"related":[],"title":"Authlib: prefixed public keys let attackers forge HS256 login tokens","description":"Authlib is a Python library which builds OAuth and OpenID Connect servers. From 1.3.1 until 1.9.0, OctKey.import_key() checks asymmetric-key markers only at byte zero while Authlib's PEM loaders accept leading whitespace, comments, or a byte-order mark. In deployments that use the documented mixed algorithm registry and already configure verification with PEM or certificate bytes containing such a prefix, an unauthenticated attacker who knows those same public-key bytes can use them as an HMAC secret and forge HS256 tokens with arbitrary identity or authorization claims. This is a bypass of the remediation for CVE-2024-37568. The module-level jwt object reaches OctKey.import_key() in authlib/jose/rfc7518/oct_key.py, where POSSIBLE_UNSAFE_KEYS fails to identify prefixed asymmetric key material. This issue is fixed in version 1.9.0.","summary":"Authlib's OctKey.import_key() only detects asymmetric key markers at byte zero, but its PEM loaders accept leading whitespace, comments, or a byte-order mark. An unauthenticated attacker who knows the public-key bytes a server uses for verification can use them as an HMAC secret and forge HS256 tokens with arbitrary identity or authorization claims.","severity":"high","cvss":7.4,"epss":0.00127,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["authlib","jwt","oauth","openid-connect","package","python"],"not_affected_if":["no-mixed-algorithm-registry","plain-key-verification","version-outside-1.3.1-to-1.9.0"],"how_to_check":"- Run `pip show authlib` and confirm the installed version is between `1.3.1` and `1.9.0`.\n- Check whether the application uses the mixed algorithm registry and configures token verification with PEM or certificate bytes that may begin with whitespace, a comment, or a byte-order mark.","fix":"- Upgrade Authlib to `1.9.0` or later.","status":"open","published_at":"2026-10-22T22:18:04+00:00","first_seen_at":"2026-10-23T21:57:32+00:00","triaged_at":"2026-10-25T03:25:39+00:00","updated_at":"2026-10-25T03:25:39+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-25T03:25:39Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade Authlib to `1.9.0` or later.","reach":"unknown","title":"Authlib: prefixed public keys let attackers forge HS256 login tokens","impact":"high","summary":"Authlib's OctKey.import_key() only detects asymmetric key markers at byte zero, but its PEM loaders accept leading whitespace, comments, or a byte-order mark. An unauthenticated attacker who knows the public-key bytes a server uses for verification can use them as an HMAC secret and forge HS256 tokens with arbitrary identity or authorization claims.","category":"package","nicknames":[],"who_cares":["python","authlib","oauth","openid-connect","jwt"],"confidence":0.8,"needs_auth":"no","worst_case":"Attacker forges tokens with arbitrary identity and authorization claims","analyst_note":"","how_to_check":"- Run `pip show authlib` and confirm the installed version is between `1.3.1` and `1.9.0`.\n- Check whether the application uses the mixed algorithm registry and configures token verification with PEM or certificate bytes that may begin with whitespace, a comment, or a byte-order mark.","needs_analyst":false,"not_affected_if":["version-outside-1.3.1-to-1.9.0","no-mixed-algorithm-registry","plain-key-verification"],"who_is_affected":"Deployments that use the documented mixed algorithm registry and already verify tokens with PEM or certificate bytes containing a leading prefix are exposed, since the public key itself becomes a forgeable HMAC secret. Services that use Authlib only for other purposes, or that verify tokens with plain keys, are not in the described path.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000997,"input_tokens":3563,"output_tokens":1281,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-114615':13A,16A '-2024':184C '-2026':12A,15A '-37568':185C '1.3.1':96C '1.9.0':98C,214C 'accept':41B,115C 'algorithm':132C 'alreadi':135C 'arbitrari':78B,170C 'asymmetr':31B,103C,205C 'asymmetric-key':102C 'attack':6A,53B,149C 'authlib':1A,17B,25B,83C,111C 'authlib/jose/rfc7518/oct_key.py':196C 'author':81B,173C 'build':89C 'bypass':178C 'byte':35B,48B,60B,108C,122C,142C,157C 'byte-ord':47B,121C 'certif':141C 'check':101C 'claim':82B,174C 'comment':44B,118C 'configur':136C 'connect':22B,93C 'contain':143C 'cve':11A,14A,183C 'deploy':126C 'detect':30B 'document':130C 'fail':201C 'fix':211C 'forg':7A,74B,166C 'hmac':71B,163C 'hs256':8A,75B,167C 'ident':79B,171C 'identifi':203C 'issu':209C 'jwt':18B,190C 'key':4A,28B,32B,59B,100C,104C,156C,194C,200C,206C 'know':55B,151C 'lead':42B,116C 'let':5A 'level':189C 'librari':87C 'loader':40B,114C 'login':9A 'mark':50B,124C 'marker':33B,105C 'materi':207C 'mix':131C 'modul':188C 'module-level':187C 'oauth':19B,90C 'object':191C 'octkey.import':27B,99C,193C 'openid':21B,92C 'openid-connect':20B 'order':49B,123C 'packag':23B 'pem':39B,113C,139C 'possibl':198C 'prefix':2A,146C,204C 'public':3A,58B,155C 'public-key':57B,154C 'python':24B,86C 'reach':192C 'registri':133C 'remedi':181C 'secret':72B,164C 'server':62B,94C 'token':10A,76B,168C 'unauthent':52B,148C 'unsaf':199C 'use':63B,67B,128C,159C 'verif':65B,137C 'version':213C 'whitespac':43B,117C 'zero':36B,109C","nicknames":[],"mitigations":[],"who_affected":"Deployments that use the documented mixed algorithm registry and already verify tokens with PEM or certificate bytes containing a leading prefix are exposed, since the public key itself becomes a forgeable HMAC secret. Services that use Authlib only for other purposes, or that verify tokens with plain keys, are not in the described path.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-22T22:18:04+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-114615","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-114615","severity":null,"published_at":"2026-10-22T22:18:04+00:00","modified_at":"2026-10-23T19:34:14+00:00","first_seen_at":"2026-10-23T21:57:32+00:00","fetched_at":"2026-10-23T22:29:03+00:00","note":null},{"source":"epss","external_id":"CVE-2026-114615","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-114615","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T07:15:51+00:00","fetched_at":"2026-10-24T07:15:51+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"}