veilletech.fr
21 oct. Feed du jour
#03 LARAVEL Article

Laravel : le guard token laisse usurper un compte

Un tableau à la place d'un jeton, et la requête fait le reste.

Un avis critique (GHSA-f9x3-7vq9-cph6, CVSS 9,2) concerne le guard d'API de Laravel de driver token : sur MySQL et MariaDB, une valeur qui n'est pas une chaîne permettait de se connecter comme un autre utilisateur. Le correctif, un test is_string dans TokenGuard, figure dans les versions 12.68.0 et 13.29.0, publiées le 25 août. Les applications à jour depuis sont protégées ; les autres vérifient config/auth.php.

2 min de lectureintermédiairevidéo 1:18
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Le mécanisme
  3. Ce que ça change
  4. Comment s'y prendre
  5. À retenir

Ce qui se passe

Laravel a publié un avis critique, GHSA-f9x3-7vq9-cph6, noté 9,2 en CVSS. Il touche Illuminate\Auth\TokenGuard, la classe derrière le driver token. Sur MySQL et MariaDB, un attaquant sans compte pouvait s'authentifier comme un utilisateur existant sans connaître son jeton d'API, et donc prendre la main sur n'importe quel compte derrière une route protégée par ce guard. Hristijan Manasijev a signalé la faille.

Votre application est concernée si un guard de config/auth.php ressemble à ceci :

config/auth.phpPHP
'guards' => [
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],

Le mécanisme

Avant le correctif, le guard s'assurait seulement que le jeton de la requête n'était pas vide, puis le transmettait au fournisseur d'utilisateurs. D'après l'avis, une valeur qui n'est pas une chaîne, par exemple un tableau, est mal traitée lors de la recherche : la requête sous-jacente retrouve un utilisateur au lieu d'échouer.

Le correctif ajoute un contrôle de type dans user() et dans validate() :

PHP
if (is_string($token) && ! empty($token)) {

Tout ce qui n'est pas une chaîne est écarté avant d'interroger la base.

Ce que ça change

Comment s'y prendre

Terminal
composer update laravel/framework
composer audit
grep -n "'driver' => 'token'" config/auth.php

Traiter en priorité les applications qui ont un guard token et tournent sur MySQL ou MariaDB.

Source : Laravel News, 20 octobre 2026. Source en anglais. Avis : GHSA-f9x3-7vq9-cph6.