Serialisation #1

La sérialisation, c'est l'idée de sauvegarder l'état d'un programme pour pouvoir le reprendre au même état plus tard, comme dans les jeux vidéo par exemple. Mais comme toute fonctionnalité en informatique, il existe des vulnérabilités, même pour la sérialisation sur le WEB !

RÉSUMÉ

Niveau : Facile

La sérialisation est souvent un élément oublié lorsque l'on construit des applications ! Pourtant c'est un concept essentiel et plus qu'utilisé au quotidien car il vous suffit d'utiliser le local storage ou d'appuyer sur sauvegardé dans votre jeu préféré et vous venez d'utiliser la sérialisation d'objet !

Pourquoi ce lab ?

Comme toute fonctionnalité, la serialisation a aussi ces vulnérabilités qu'il faut avoir en tête, que ce soit pour les exploiter (à vous les cheat infinies dans les jeux) ou pour s'en prémunir !

Mise en place du lab

La première étape est de télécharger les ressources de ce lab, que vous choisissiez d'être de la Red Team ou de la Blue Team, cela n'a pas d'importance.

Les ressources :

Pour démarrer le lab et lancer l'environnement virtuel, deux choix s'offrent à vous : utiliser une version Node.js installée localement sur votre ordinateur, ou en utilisant l'image Docker.

Avec NodeJS en local :

Je vous recommande fortement d'utiliser un gestionnaire de version de Node, tel que ASDF par exemple. Vous trouverez d'ailleurs dans le dossier un fichier .tool-versions contenant la version Node.js actuellement utilisée.

  • Dézipez l'archive et ouvrez un terminal dans le dossier (serialization-main)

  • Rentrez dans le dossiez du lab

    $ cd serialization-main
  • Installer les dépendances NodeJS avec npm

    $ npm install
  • Lancer l'application WEB

    $ npm run start

Avec Docker :

Pour docker, il vous suffit de construire l'image localement avec la commande docker build, puis de lancer le conteneur en n'oubliant pas d'exposer le port 3001 sur le port de votre choix

  • Dézipez l'archive et ouvrez un terminal dans le dossier (serialization-main)

  • Rentrez dans le dossiez du lab

    $ cd serialization-main
  • Construire l'image du conteneur

    $ docker build -t serialization .
  • Lancer l'application WEB

    $ docker run -p 3001:3001 serialization

Dans les deux cas, vous obtenez maintenant un site web vulnérable avec une mauvaise serialization sur le port 3001 auquel vous pouvez accéder avec votre navigateur préféré.

Le site web est une application simple pour s'entraîner à viser en cliquant sur une cible mouvante. Plus l'on clique, plus l'on a de points évidemment !

Capture d'écran du site web du lab serialization 1 vulnérable

Red Team

Vos objectifs

En tant qu'attaquant, vous avez deux objectifs :

  1. Réussir à obtenir un score à plus de 6 chiffres sans jouer !
  2. Changer le score de quelqu'un déjà présent sur le leaderboard (à la hausse ou à la baisse)

Indice 1 : Comment est stocké le score actuellement ?

Indice 2 : Comment est stocké votre prénom pour le leaderboard ?

Solution (Cliquez pour révéler)

Blue Team

Votre objectif

En tant que défenseur, votre objectif est de modifier le code pour que les deux vulnérabilités ne soient plus exploitables !

Indice 1: Quelle portion du code rend le site vulnérable actuellement ?

Indice 2 : Quelle vulnérabilité sur le site permet à un attaquant de modifier si facilement son score ?

Indice 3 : Quelle vulnérabilité sur le site permet à un attaquant de modifier le score de quelqu'un d'autres ?

Solution (Cliquez pour révéler)