Zero Radar
← feed
CriticalVulnerabilityCVE-2026-96760updated 27 Oct 2026, 14:51 UTC

Authlib accepts unsigned login tokens, letting attackers forge identity

Authlib is a Python library that checks signed tokens to confirm who a user is. A bug lets an attacker send a token with no signature at all, and the library accepts it as genuine, so the attacker can pretend to be any user, including an ad

Fixed in Authlib 1.9.0Official source
SeverityCriticalCVSS 9.1 of 10
Being exploited?UnclearNo reports either way yet
Fix available?YesAuthlib 1.9.0 · since 27 Oct 2026
How sure is this?Official sourceBacked by an official source

How the attack works simplified

  1. 1Attacker crafts tokenEmpty signatures array with chosen claims
  2. 2Sends requestToken presented to the application
  3. 3Authlib verifiesEmpty loop leaves flag as True
  4. 4Payload trustedForged claims accepted as genuine
  5. ResultAttacker is accepted as any user

What happened

In Authlib before 1.9.0, JsonWebSignature.deserialize_json() returns the payload as verified when the JWS signatures array is empty, because the validity flag starts as True and is never checked when the loop does not run; no key is consulted.

Why it is dangerous: An unauthenticated remote caller can submit a forged payload with arbitrary identity or role claims and have it accepted, giving a full authentication and authorization bypass.

Are you affected?

You are affected if your application uses Authlib 1.8.0 or earlier and calls JsonWebSignature.deserialize_json() on input it did not create.

Package / productAffected versionsFixed in
authlib · pip<= 1.8.01.9.0

What to do

  1. Upgrade Authlib to 1.9.0 or later (pip install --upgrade authlib)
  2. Check whether your code calls JsonWebSignature.deserialize_json() on untrusted input and review what claims it trusts
  3. If you cannot upgrade immediately, stop trusting deserialize_json() results for authentication decisions

Timeline

  1. 27 Oct 2026, 14:50 UTC
    Publicly disclosed
  2. 27 Oct 2026, 14:50 UTC
    Reported by GitHub Advisory · GitHub Advisory
  3. 27 Oct 2026, 14:51 UTC
    Picked up by Zero Radar

Sources 1 report, oldest first

Official vendor, government CERT or advisory database

Technical details

ID
CVE-2026-96760 · GHSA-6v38-4h7w-rj9h
CVSS
9.1 / 10
EPSS
0.4% chance of exploitation within 30 days
Disclosed
27 Oct 2026, 14:50 UTC
On Zero Radar
27 Oct 2026, 14:51 UTC (1 min after disclosure)
Last change
27 Oct 2026, 14:51 UTC

The plain-language parts and the attack diagram were written by an AI model (anthropic/claude-haiku-5.5) from the sources above. Facts like versions, exploitation and dates come from the sources themselves. How Zero Radar works

Authlib accepts unsigned login tokens, letting attackers forge identity · Zero Radar