Démarrez la machine, hackez le système et trouvez les flags cachés pour compléter ce défi et gagner des XP!
La confusion d'algorithme JSON Web Token (JWT) est une classe de vulnérabilité critique qui exploite la manière dont les applications gèrent la vérification de signature JWT. Lorsqu'un serveur est configuré pour accepter plusieurs algorithmes de signature sans validation appropriée, les attaquants peuvent manipuler l'en-tête d'algorithme du token pour tromper le serveur et lui faire utiliser une méthode de vérification différente de celle prévue - permettant potentiellement un contournement complet de l'authentification. Le JWT hacking par confusion d'algorithme est l'une des attaques JWT les plus impactantes découvertes à ce jour.
Les JWT supportent deux catégories principales d'algorithmes de signature : symétrique (basé sur HMAC, comme HS256) et asymétrique (basé sur RSA ou ECDSA, comme RS256). Avec RS256, le serveur signe les tokens avec une clé privée et les vérifie avec la clé publique correspondante. Avec HS256, la même clé secrète est utilisée pour la signature et la vérification. Cette distinction est le fondement de l'attaque par confusion d'algorithme.
L'attaque exploite une interaction dangereuse entre ces types d'algorithmes. Si un serveur utilise RS256, sa clé publique est souvent disponible (parfois même publiée). Un attaquant peut changer l'algorithme de l'en-tête JWT de RS256 à HS256, puis signer le token modifié en utilisant la clé publique du serveur comme secret HMAC. Lorsque le serveur traite ce token, une implémentation vulnérable lit l'algorithme depuis l'en-tête du token, voit HS256, et utilise sa clé publique RSA comme clé de vérification HMAC - correspondant exactement à la signature de l'attaquant. Cela permet à l'attaquant de falsifier des tokens avec des claims arbitraires.
Des vulnérabilités de confusion d'algorithme ont été trouvées dans les principales bibliothèques JWT de multiples langages de programmation, incluant PyJWT pour Python, node-jsonwebtoken pour Node.js et firebase/php-jwt pour PHP. Une fois exploitées, les attaquants obtiennent la capacité de falsifier des tokens administratifs, d'escalader les privilèges, d'usurper l'identité de n'importe quel utilisateur et de contourner complètement l'authentification. La nature généralisée de cette vulnérabilité a conduit à des avis de sécurité importants et des mises à jour de bibliothèques dans tout l'écosystème JWT.
Les implémentations JWT sécurisées doivent explicitement spécifier l'algorithme attendu côté serveur plutôt que de faire confiance à l'algorithme déclaré dans l'en-tête du token. Les bibliothèques doivent être configurées pour rejeter les valeurs d'algorithme inattendues, et les applications ne doivent jamais permettre le changement d'algorithme entre types symétrique et asymétrique. Maintenir les bibliothèques JWT à jour et suivre les meilleures pratiques de sécurité pour la gestion des tokens prévient les attaques par confusion d'algorithme.
Créez un compte gratuit et pratiquez la cybersécurité.
Créez un compte gratuit pour démarrer votre propre serveur dédié, soumettre des flags et gagner des XP au classement.
Commencer à Hacker GratuitementLabs qui partagent des compétences similaires
Choisissez comment vous voulez commencer
Connectez-vous à votre compte