Ce qui se passe
CVE-2026-18500 touche @fastify/jwt dans toutes ses versions antérieures
à 10.2.2. Le plugin permet à une route de vérifier un jeton avec une clé qui
n'est pas le secret global de l'application :
await request.jwtVerify({ key: cleAdmin })La fusion des options applique la clé globale après celle donnée à l'appel. Le secret global l'emporte, et l'intention de la route est annulée sans erreur ni avertissement.
| Référence | Valeur |
|---|---|
| Identifiant | CVE-2026-18500 |
| Avis GitHub | GHSA-j4cx-787j-xjqg |
| Score NVD | 8.1 HIGH |
| Vecteur | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| Faiblesse | CWE-347 |
| Corrigé dans | 10.2.2 |
Ce que ça change
Le motif visé est répandu : une clé par domaine — utilisateur, administration,
locataire, service à service. Avec le défaut, cette frontière n'existe plus : tout porteur d'un jeton
signé par la clé globale — donc n'importe quel compte authentifié normalement —
passe sur une route qui attendait une autre signature. Le vecteur le dit :
PR:L, un privilège faible suffit ; C:H/I:H, confidentialité et intégrité
tombent ensemble.
Une application qui n'emploie qu'une seule clé n'est pas exposée : il n'y a aucune séparation à contourner.
Ce qu'il faut faire
npm install @fastify/jwt@10.2.2Puis, si des clés distinctes coexistent, chercher dans les journaux d'authentification les jetons de la clé globale arrivés sur des routes à clé spécifique. Toute trace suspecte impose une rotation des clés concernées.
Source : HOL — CVE-2026-18500 · GHSA-j4cx-787j-xjqg