Rainbow Rocket (Web) - 404CTF2025

Principe:
Forger un JWT pour se faire passer pour l'admin car le site autorise l'algorithme none, ce qui est en soi une vulnérabilité critique!

Infos (cf menu latéral):
🚩 Flaggué! +100 points gagnés — 💾 Téléchargez les fichiers du challenge
404CTF{decod3diSNOtVeRiFiED}

Le challenge

L'énoncé du challenge
Il a été indisponible par moments, mais il a finit par revenir 🙂

Localiser le flag

En explorant le code du challenge, on commence par localiser le flag
Si on tente d'y accéder, la page nous répond que l'on doit être admin
On retrouve, dans le code, cette condition sous la forme du paramètre username du jwt

Obtenir un JWT

On peut se créer un compte (évidemment, impossible de l'appeler "admin" 😆
En s'y connectant, ce compte nous permet d'avoir un JWT valide pour ce username
On peut ensuite décoder ce JWT (c'est du simple base64) via des sites en ligne

Ici, on est dans un CTF donc on se fiche un peu de la confidentialité des données. Mais dans le cadre d'un système réel (en test ou en production d'ailleurs), je déconseille ce genre d'outil en ligne car rien ne garantit qu'il n'enregistre pas les données que vous lui envoyez.
Une revue de sécurité est donc indispensable avant d'utiliser tout outil de ce genre sur des données réelles.

JWT "none" alg

Les JWT utilisent un système de signature pour garantir leur authenticité. Toutefois, le standard JWT autorise l'algorithme de signature appelé none, c'est à dire un algorithme qui autorise l'absence de signature!

On va forger notre propre JWT et le faire accepter par le site en utilisant l'ago de signature none

Dans tout système en production, il est indispensable de s'assurer que l'algorithme none n'est pas autorisé.
Il est même fortement recommandé de n'autoriser qu'un et un seul algorithme, celui utilisé par le système pour générer ses JWT (choisissez l'algorithme le plus sûr du moment) et de rejeter tout autre algorithme, none inclus.

Utilisons ce site pour forger notre JWT et le "signer" avec l'algo none

Là encore, je rappelle que pour un CTF, on peut se permettre ce genre d'outil en ligne sans trop le vérifier, mais pour des données de production, il faut soit le faire localement (sur son poste, sans utiliser d'outil en ligne) soit vérifier que l'outil en ligne n'exfiltre pas les informations qu'on y met.

On écrase alors notre Cookie token avec ce JWT forgé

Flag

On est bien authentifié comme "admin", et on obtient donc le flag!

Ce genre de vulnérabilité permet aussi d'étendre la durée de validité (iat) d'un JWT, ce qui permet alors d'avoir (par exemple) accès à une ressource ou à un document même après l'expiration de notre accès (à condition donc que le système autorise l'algo none).

Flag: 404CTF{decod3diSNOtVeRiFiED}