Aller au contenu principal
Making DigitalMaking Digital
Note technique

Faille critique du TokenGuard de Laravel : passer en 12.68 ou 13.29

En bref

La faille CVE-2026-114509 touche le guard `token` intégré à Laravel : sur MySQL ou MariaDB, une valeur de jeton qui n'est pas une chaîne de caractères peut faire correspondre la requête à un autre utilisateur, sans connaître son jeton. Elle est corrigée dans Laravel 12.68.0 et 13.29.0. Vérifiez votre `config/auth.php` et votre version, puis lancez `composer update laravel/framework`.

Une API protégée par le guard token de Laravel, sur une base MySQL ou MariaDB, peut laisser quelqu'un se connecter à la place de n'importe quel utilisateur existant, sans connaître son jeton. La note de gravité est de 9,8 sur 10 en CVSS 3.1 (9,2 en CVSS v4). Le correctif est livré dans Laravel 12.68.0 et 13.29.0 : avant de lancer la mise à jour, il faut juste savoir si vous êtes concerné.

Quelle est cette faille, et quelles versions touche-t-elle ?

Elle porte la référence CVE-2026-114509 (avis GHSA-f9x3-7vq9-cph6). Le guard token lit un jeton dans la requête, puis cherche l'utilisateur correspondant dans la base. Quand la valeur reçue n'est pas une simple chaîne de caractères, la requête SQL peut désigner un autre utilisateur que celui visé : l'attaquant est alors authentifié comme lui, sans compte ni jeton valide.

Branche de Laravel Versions touchées Version corrigée
12.x avant 12.68.0 12.68.0
13.x 13.0.0 jusqu'à 13.28.x 13.29.0

L'avis précise deux conditions : le guard token standard doit protéger des routes, et la base doit être MySQL ou MariaDB. Il ne liste aucun contournement. Sanctum et Passport ont leurs propres guards et ne sont pas cités par l'avis. Une preuve de concept publique a été signalée peu après la publication : mieux vaut ne pas attendre.

Comment savoir si votre application utilise ce guard ?

Cherchez le pilote token dans la configuration des guards :

PHP
// config/auth.php
'guards' => [
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],

Si vous n'y trouvez aucun 'driver' => 'token', ou si vos routes d'API passent par Sanctum ou Passport, vous n'êtes pas dans le cas décrit. Vérifiez aussi quelle version tourne réellement :

Terminal
grep -n "'driver' => 'token'" config/auth.php
grep -rn "auth:api" routes/
composer show laravel/framework | grep versions

Comment corriger ?

Mettez à jour le framework, vérifiez la version, lancez les tests puis déployez :

Terminal
composer update laravel/framework
composer show laravel/framework | grep versions
php artisan test

Si votre contrainte est ^12.0 ou ^13.0, composer update suffit. Les sources que nous avons consultées divergent sur un correctif pour Laravel 11 et les versions plus anciennes : consultez l'avis officiel du dépôt laravel/framework. Si vous êtes sur une branche non corrigée, la vraie solution est de migrer vers Sanctum (jetons hachés, révocables) ou de monter de version, pas de patcher à la main. Sur un serveur, pensez à redémarrer les workers de file d'attente après le déploiement avec php artisan queue:restart.

Peut-on savoir si quelqu'un a déjà essayé ?

Pas de façon certaine. Une première piste : chercher dans les journaux du serveur web des requêtes où le paramètre api_token est envoyé sous forme de tableau :

Terminal
zgrep -E 'api_token(\[|%5B)' /var/log/nginx/access.log*

Cette recherche ne voit que l'adresse des requêtes : un jeton envoyé dans le corps JSON n'apparaît pas dans ces journaux. Regardez aussi les connexions et actions inhabituelles des comptes sensibles (administrateurs, comptes avec droits de facturation), et, si le doute persiste, régénérez leurs jetons.

Le suivi de ce type d'alerte fait partie de notre offre d'hébergement et de maintenance. Si vous voulez qu'on regarde une application avec vous, écrivez-nous.

À retenir
  • Corrigé dans Laravel 12.68.0 et 13.29.0 : composer update laravel/framework puis tests et déploiement.
  • Concerné seulement si le guard token intégré protège des routes, sur MySQL ou MariaDB.
  • Aucun contournement n'est listé dans l'avis : seule la mise à jour règle le problème.
  • Après la mise à jour, redémarrez les workers et surveillez les comptes sensibles.

Sources : avis CVE-2026-114509 sur GitLab Advisory Database et avis GHSA-f9x3-7vq9-cph6.

Questions fréquentes

Sanctum et Passport sont-ils concernés par cette faille ?

L'avis vise le guard token intégré au framework et ne cite ni Sanctum ni Passport, qui ont leurs propres guards. Vérifiez quand même votre version de Laravel et vos routes protégées par auth:api.

Faut-il MySQL pour que la faille soit exploitable ?

Selon l'avis, la base doit être MySQL ou MariaDB pour que la faille se déclenche. Mettez à jour dans tous les cas : le correctif ne coûte qu'un composer update.

Que faire si je ne peux pas mettre à jour Laravel tout de suite ?

L'avis ne propose aucun contournement. En attendant, retirez l'accès aux routes protégées par le guard token (au niveau du serveur web ou du pare-feu) ou basculez ces routes sur Sanctum.

Making Digital

Nous connectons les logiciels des PME, automatisons leurs tâches répétitives et créons des assistants IA, depuis 2010. Nos articles partent de nos projets réels.

Notre parcours
Une question sur ce sujet ?

Parlons-en 30 minutes.

Vous saurez si votre problème se règle, comment, et en combien de temps. Sans engagement.