Skip to content
Laskyr

laravel/passport security advisory

CVE-2026-39976: Laravel Passport: TokenGuard Authenticates Unrelated User for Client Credentials Tokens

CVE-2026-39976 is a high-severity authentication bypass vulnerability in the PHP package laravel/passport (CVSS 7.1), published 9 April 2026. It is fixed in 13.7.1; earlier versions are affected. Exploiting it needs a low-privilege user account.

high 7.1 published 2026-04-09 · updated 2026-10-26

Fixed in laravel/passport 13.7.1

This authentication bypass issue affects laravel/passport versions >= 13.0.0, < 13.7.1. Upgrade to the fixed version for your release line (13.7.1). The newest release, 13.10.0, is not affected.

Affected versions
>= 13.0.0, < 13.7.1
Fixed in
13.7.1
Newest release
13.10.0
Severity
High · CVSS 7.1
Type
Authentication bypass
CWE-287
Exploited in the wild
Not on the CISA KEV list
checked 2026-11-04

Is your laravel/passport version affected?

Run composer show laravel/passport in your project, then enter the version. We check it against this and every other known laravel/passport advisory.

Who can exploit CVE-2026-39976

CVSS vector (scored by GitHub): CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N

Your app is only exposed if it uses the affected part of laravel/passport. The advisory below says which part that is. If you are not sure, upgrade anyway: it costs less than finding out.

How to fix CVE-2026-39976 in laravel/passport

  1. Find the installed version: composer show laravel/passport. If you never required it yourself, composer why laravel/passport shows which package pulls it in.
  2. Update it: composer update laravel/passport --with-all-dependencies. You need 13.7.1 or newer.
  3. If Composer will not go that high, your composer.json constraint is holding it back. Widen it (for example "laravel/passport": "^13.7.1" if you can take that version), or upgrade the package that requires it.
  4. Run composer audit. It reads the same advisory data and should no longer list CVE-2026-39976.
  5. Commit composer.lock and deploy it. On the server, run composer install --no-dev from the lock file, not composer update.

If you cannot upgrade yet

General hardening for authentication bypass issues while the upgrade waits. None of it replaces the fix.

The CVE-2026-39976 advisory

Laravel Passport provides OAuth2 server support to Laravel. From 13.0.0 to before 13.7.1, there is an Authentication Bypass for client_credentials tokens. the league/oauth2-server library sets the JWT sub claim to the client identifier (since there's no user). The token guard then passes this value to retrieveById() without validating it's actually a user identifier, potentially resolving an unrelated real user. Any machine-to-machine token can inadvertently authenticate as an actual user. This vulnerability is fixed in 13.7.1.

Description from the CVE record, published by GitHub (the CVE Numbering Authority), via the NVD entry for CVE-2026-39976. Advisory title: “Laravel Passport: TokenGuard Authenticates Unrelated User for Client Credentials Tokens”.

References

Related

Need help patching or upgrading? Laskyr does PHP and Laravel security fixes and upgrades. Tell us what you run and we reply with a plan and a price.

Ask about a fix

Where this data comes from

First hour checklist

If the site was just hacked, read the emergency kit before you delete files. The page is free. Email is optional.

Read the emergency kit