
Эксплойт proof-of-concept для CVE-2026-39987 — RCE до аутентификации в WebSocket-эндпоинте /terminal/ws Marimo, позволяющая получить интерактивную оболочку без учётных данных.
CVSS 4.0: 9.3 (Critical) · AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H
Затрагивает: marimo <= 0.20.4 · Исправлено в: 0.23.0 · CWE-306 (Отсутствие аутентификации)
Advisory: GHSA-2679-6mx9-h9xc · Fix: marimo-team/marimo@c24d480
WebSocket-эндпоинт /terminal/ws (marimo/_server/api/endpoints/terminal.py)
проверяет только режим сессии (EDIT) и поддержку платформы, прежде чем принять
соединение и вызвать pty.fork(). Он не содержит ни декоратора @requires(...),
ни вызова validate_auth().
Для сравнения, в 0.20.4:
@requires(...) в 18 эндпоинтах./ws (notebook) -> 2 вызова .validate_auth()terminal.py -> 0 @requires, 0 validate_auth. <-- уязвимость.Промежуточное ПО AuthBackend защищает HTTP и WebSocket /ws, но
/terminal/ws принимает соединение без cookie и без токена и порождает
PTY-шелл с привилегиями процесса marimo.
marimo edit ...), что является режимом по умолчанию для редактора.pty (Linux/macOS; Windows и Pyodide не затронуты).Злоумышленник, имеющий сетевой доступ к серверу marimo edit (что часто
встречается в удалённых / контейнерных развёртываниях, нередко запущенных от
root), получает интерактивный шелл без аутентификации: кража учётных данных
(cat .env), боковое перемещение, развёртывание вредоносного ПО. Эксплуатировалась
в реальных атаках менее чем через 10 ч после раскрытия; добавлена в каталог KEV
CISA 2026-04-23.
pip install "marimo==0.20.4" websockets
marimo edit demo.py --headless --port 2718 --token --token-password SECRET
python exploit.py ws://127.0.0.1:2718 "id; cat /etc/passwd"
exploit.py не отправляет ни токен, ни cookie, ни заголовок Authorization. Он
отправляет команду как обычный текст + "\r" (Enter), точно так, как пользователь
ввёл бы её в терминале.
/ws -> 403 (аутентификация РАБОТАЕТ)./terminal/ws БЕЗ токена -> ПРИНЯТ. Выполнено на сервере:
uid=1000() gid=1000() ...
Linux ...
и записан /tmp/cve_2026_39987_proof.txt -> RCE подтверждён.Обновитесь до marimo >= 0.23.0. Временная мера: не предоставляйте marimo edit
доступ к недоверенным сетям; разместите редактор за аутентифицированным прокси;
запускайте его без привилегий / в контейнере без секретов.
Только для авторизованного тестирования безопасности и образовательных целей. Запускайте только против систем, которыми вы владеете или на тестирование которых у вас есть явное разрешение.