Archives Wild Code School
Cybersecurity

[Deprecated] Hack d'un JWT avec une clef secrete faible

Quête 4 sur 13 · 2 images archivées

Introduction

Pour qu'un système d'authentification par JWT soit sécurisé, il est très important d'utiliser une clé secrète difficile à cracker. Dans cette quête tu vas pouvoir te mettre dans la peau d'un hacker et apprendre à cracker un token JWT qui a été généré avec une clé secrète pas suffisamment robuste.

image

spacer-small

👉 Disclaimer

L’article 323-1 du code pénal sanctionne le fait d’accéder ou de se maintenir frauduleusement, dans tout ou partie d’un système de traitement automatisé.

La peine encourue est 2 ans d’emprisonnement et 30 000€ d’amende. Celle-ci peut être portée à 3 ans d’emprisonnement et 45 000€ d’amende lorsqu’il en résulte soit la suppression, soit la modifications de données contenues dans le système, soit un altération du fonctionnement de ce système.

Pour que tu puisses effectuer cette quête en toute légalité, nous avons mis en place un serveur que tu as l'autorisation de hacker.

👉 Clone du repo et installation des dépendences

Clone ce repo qui contient tout ce dont tu as besoin pour cracker un JWT faible:

↗
JWT Workshop
github.com

Une fois cloné, rends-toi dans le repo et lance la commande npm install pour installer les dépendances.

👉 Génération des clés potentielles

Une fois dans le repo, lance la commande npm run gen-candidate-keys.

Un nouveau fichier candidateKeys a été créé qui contient toutes les combinaisons possibles de 4 lettres minuscules.

Tu peux modifier les critères de génération de clés en modifiant le fichier candidateKeysGenerator.ts

👉 Génération d'un JWT

Lance la commande npm run gen-jwt pour générér toi même un token JWT. Observe le fichier jwt qui a été créé. Il est composé du header, du payload et de la signature, encodé en base 64 et séparé par des points.

image

Observe également le fichier jwtGenerator.ts qui a servi à générer ce token.


👉 Crack du JWT

Maintenant que tu as généré un JWT et une liste de clés potentielles, tu vas essayer de retrouver la clé qui a servi à générer le JWT. Pour cela, tu vas récupérer le header et le payload du JWT généré et pour chaque clé de la liste, générer une signature.

Tu vas répéter ce processus jusqu'à temps que la signature générée corresponde à la signature du JWT, à ce moment tu auras donc retrouvé la clé qui a servi à générer le JWT et tu pourras générer toi même des JWT qui seront validés par le serveur.

Observe le code du fichier crack.ts puis utilise-le en lançant la commande npm run crack.

Tu vas voir dans la console toutes les tentatives jusqu'au moment où le secret aura été retrouvé.

💪 Challenge

Maintenant que tu sais cracker un JWT faible, utilise tes connaissances pour cracker le site https://hackme.nausicaa.wilders.dev.

Un JWT t'es donné lorsque tu vas sur https://hackme.nausicaa.wilders.dev/token

Retrouve la clé secrète utilisée pour générer le JWT puis génère-en un avec le rôle admin.

Pour vérifier qu'il est valide, envoie une requête GET à l'url https://hackme.nausicaa.wilders.dev/admin avec un header Authorization contenant le JWT avec le mot clef Bearer. Par exemple:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoidXNlciIsImlhdCI6MTY4MTk5MzA2OH0.mYvDKg-1Y0lhtrtS3e5zu7OSuWGsuP7ubBv_NXTven4

Tu constates à quel point il est facile de cracker un système d'authentification protégé avec une clé aussi simple. Utilise toujours des clés secrètes longues et générées aléatoirement pour rendre le piratage par force brute pratiquement impossible.