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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-39987 — Набор инструментов для обнаружения и эксплуатации CVE-2026-39987 — предварительно аутентифицированного RCE в блокнотах Marimo. Включает сканер на Python и NSE-скрипт Nmap для выявления уязвимых экземпляров через проверку WebSocket-конечных точек. | Kitploit
Инструменты/GitHubGitHub/keraattin/cve-2026-39987
Сканеры уязвимостейАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСбор информацииВеб-безопасностьСетевая безопасностьТестирование на Проникновение
GitHubkeraattin/cve-2026-39987

CVE-2026-39987

Набор инструментов для обнаружения и эксплуатации CVE-2026-39987 — предварительно аутентифицированного RCE в блокнотах Marimo. Включает сканер на Python и NSE-скрипт Nmap для выявления уязвимых экземпляров через проверку WebSocket-конечных точек.

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

Популярное

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

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

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

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

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

CVE-2026-39987 — Предварительно аутентифицированное удалённое выполнение кода в Python-ноутбуке Marimo

CVE-2026-39987 CVSS 9.3 CWE-306 Marimo Pre-Auth RCE

TL;DR

Уязвимость предварительно аутентифицированного удалённого выполнения кода в Marimo — открытом Python-ноутбуке для науки о данных и AI/ML. WebSocket-конечная точка терминала (/terminal/ws) полностью пропускает проверку аутентификации, в то время как соседняя конечная точка ноутбука (/ws) корректно её применяет. Неаутентифицированный злоумышленник может подключиться к /terminal/ws и получить полноценную интерактивную PTY-оболочку на хост-системе без каких-либо учётных данных.

Эксплуатировалась в дикой природе в течение 10 часов после раскрытия. Злоумышленники похитили учётные данные AWS менее чем за 3 минуты.

Затрагивает Marimo <= 0.20.4. Исправлено в Marimo 0.23.0.


Содержание

  • Краткие факты
  • Что такое Marimo?
  • Глубокий анализ уязвимости
    • Две WebSocket-конечные точки
    • Отсутствующая проверка аутентификации
    • Атака: от уведомления до ключей AWS за 3 минуты
  • Анализ воздействия
  • Затронутые версии
  • Общая картина: атаки на инструментарий AI/ML
  • Обнаружение
    • Сканер на Python
    • NSE-скрипт для Nmap
    • Ручная проверка
  • Индикаторы компрометации
  • Устранение
  • Ссылки
  • Автор

Краткие факты

ПолеДетали
ID CVECVE-2026-39987
ПоставщикMarimo Project
ПродуктMarimo (Python-ноутбук)
Затронутые версии<= 0.20.4
CVSS v3.19.3 (Критический)
CWECWE-306 — Отсутствие аутентификации для критической функции
Вектор атакиСеть
АутентификацияНе требуется
Взаимодействие с пользователемНет
Зрелость эксплойтаАктивно эксплуатируется в дикой природе
Время до эксплуатации~10 часов после раскрытия
Исправлено вMarimo 0.23.0

Что такое Marimo?

Marimo — это открытый реактивный Python-ноутбук, созданный как современная альтернатива Jupyter. Он предназначен для науки о данных, экспериментов в области AI/ML и интерактивного анализа данных. Его ключевые особенности включают автоматическое отслеживание зависимостей, воспроизводимое выполнение и более удобный опыт разработчика по сравнению с традиционными ноутбуками.

Marimo быстро набирает популярность в сообществе Python и AI/ML, особенно среди специалистов, которым нужны более структурированные рабочие процессы с ноутбуками, чем те, что предлагает Jupyter.

Как и все среды ноутбуков, экземпляры Marimo обычно имеют доступ к чувствительным ресурсам: облачным учётным данным (AWS, GCP, Azure), строкам подключения к базам данных, ключам API для AI-сервисов (OpenAI, Anthropic и т. д.) и внутренним сетям. В отличие от традиционных веб-приложений, ноутбуки предназначены для выполнения произвольного кода. Это их основная цель.

Такое сочетание делает любой обход аутентификации в среде ноутбуков особенно разрушительным.``` Typical Marimo Deployment:

┌──────────────┐ ┌────────────────────────────────┐ │ │ HTTP │ Marimo Server │ │ Browser │────────>│ │ │ (User) │ │ ┌──────────────────────────┐ │ │ │<────────│ │ /ws (Notebook) │ │ └──────────────┘ WS │ │ ✅ validate_auth() │ │ │ └──────────────────────────┘ │ │ │ │ ┌──────────────────────────┐ │ │ │ /terminal/ws │ │ │ │ ❌ NO AUTH CHECK │ │ │ └──────────────────────────┘ │ │ │ │ ┌──────────────────────────┐ │ │ │ Python Environment │ │ │ │ .env files │ │ │ │ AWS credentials │ │ │ │ API keys │ │ │ └──────────────────────────┘ │ └────────────────────────────────┘

---

## Глубокий анализ уязвимости

### Два WebSocket-эндпоинта

Сервер Marimo реализует несколько WebSocket-эндпоинтов для различных функций. Ключевое различие между двумя основными эндпоинтами заключается в наличии (или отсутствии) проверки аутентификации:```
  Authentication Flow Comparison:

  /ws (Notebook WebSocket):
  ┌─────────┐    ┌───────────────┐    ┌──────────┐    ┌───────────┐
  │ Connect │───>│ validate_auth │───>│  Accept  │───>│ Notebook  │
  └─────────┘    └───────┬───────┘    └──────────┘    └───────────┘
                         │
                    ❌ Reject if
                    not authenticated

  /terminal/ws (Terminal WebSocket):
  ┌─────────┐    ┌───────────────┐    ┌──────────┐    ┌───────────┐
  │ Connect │───>│ Check mode &  │───>│  Accept  │───>│ PTY Shell │
  └─────────┘    │ platform only │    └──────────┘    └───────────┘
                 └───────────────┘
                 ⚠️ No auth check!
                 Anyone gets a shell!

Отсутствующая проверка аутентификации

Конечная точка блокнота (/ws) корректно вызывает validate_auth() для проверки личности пользователя перед принятием WebSocket-соединений. Это ожидаемое поведение безопасности.

Конечная точка терминала (/terminal/ws) проверяет только, находится ли сервер в рабочем режиме и поддерживает ли платформа функциональность терминала. Она никогда не вызывает validate_auth(). После прохождения этих базовых проверок она принимает соединение и создает полноценную PTY-сессию (псевдотерминал).```python

/ws (Notebook) — CORRECT implementation

async def websocket_connect(self, message): await self.validate_auth() # ✅ Checks authentication await self.accept() # ... notebook communication

/terminal/ws (Terminal) — VULNERABLE implementation

async def websocket_connect(self, message): if not self.is_running_mode(): # Only checks mode await self.close() return if not self.is_platform_supported(): # Only checks platform await self.close() return await self.accept() # ❌ No auth! Anyone gets a shell # ... PTY shell creation

Это **CWE-306: Отсутствие аутентификации для критической функции**. Самый опасный endpoint на сервере (тот, который предоставляет интерактивную оболочку) вообще не имеет аутентификации.

### Атака: от консультации до ключей AWS за 3 минуты
Скачать инструмент