Vulnerability advisory

CVE-2026-55735

Guardian.revoke/3 acts on unverified token claims, allowing forged-token session revocation

Published Updated OSV record ↗

Also known as EEF-CVE-2026-55735GHSA-7975-hp3r-5qhv

Severity
  • CVSS 4.0CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Affected versions

Repository

Affected commitsFixed by commit
GIT github.com/ueberauth/guardian ↗
b15e86c868f76631818a13e76759dfae7693b1ec to before e6017b492b8ef55e24fd08dea45ce11780d7b4f7e6017b492b8ef55e24fd08dea45ce11780d7b4f7
Not specified2bd7a8c29770d423d855c0a4965caa6c3e486901
Also listed as affected (18)
  • v2.4.0
  • v2.3.2
  • v2.3.1
  • v2.3.0
  • v2.2.4
  • v2.2.3
  • v2.2.2
  • v2.2.1
  • v2.1.2
  • v2.1.1
  • 2.1.0
  • v2.0.0
  • v1.2.1
  • v1.2.0
  • v1.1.1
  • v1.1.0
  • v1.0.1
  • v1.0.0

Description

Improper Verification of Cryptographic Signature in ueberauth guardian allows an unauthenticated attacker to revoke a victim's session with a forged token.

Guardian.revoke/3 in lib/guardian.ex decodes the supplied token with peek/1, which performs no signature verification (it only base64-decodes the JWT header and payload). The resulting unverified claims are forwarded directly to the configured token module's revoke callback and the implementation's on_revoke callback, a state-mutating sink. The sibling operations refresh/2 and exchange/4 both call decode_and_verify first, so the signature is checked before anything acts on the claims; revoke/3 is the only state-mutating path that acts on claims without verifying the signature.

An attacker who knows or guesses a victim's identifying claim values (jti, sub) can forge a JWT carrying those claims, sign it with an arbitrary key, and submit it to any endpoint that funnels a caller-supplied token into Guardian.revoke/3 (the standard logout / session-revocation pattern). When the token module mutates state keyed by the claims (whitelist deletion or blacklist insertion, for example a GuardianDb-style store), the victim's legitimate session is evicted. This is an unauthenticated session-revocation denial of service; the attacker never needs the signing secret.

This issue affects guardian: from 1.0.0 before 2.4.1.

References

  • Codex
  • Claude Code
  • VS Code
  • GitHub Copilot
  • Cursor
  • Cline
  • Windsurf
  • Google Anti-gravity
  • OpenCode
  • Pi
  • Gemini CLI
  • Hermes Agent
  • Zed
  • Junie
  • Qwen Code
  • Kiro
  • Kilo Code
  • Factory Droid

Set up GitHits for your agents

Run this command:

<> bash
npx githits@latest init

What happens next:

  1. Opens your browser to authorize GitHits
  2. Asks whether to set up GitHits at the user or project level
  3. Detects your supported AI coding tools
  4. Lets you choose which tools to configure
  5. Configures the selected tools