Marimo unauth RCE exploited in wild (CVE-2026-39987) [PoC]
CVE-2026-39987
Unauthenticated RCE in Marimo notebooks gives attackers a full root shell. CVE-2026-39987 is exploited in the wild. Update to v0.23.0.
Actively exploited in the wild - CVE-2026-39987 is a critical remote code execution in Coreweave Marimo before 0.23.0 that grants unauthenticated attackers a fully interactive system shell via the insecure /terminal/ws endpoint.
Overview
An unauthenticated remote code execution (RCE) vulnerability in Marimo reactive Python notebooks allows attackers to gain full system shell access without any credentials. The flaw, tracked as CVE-2026-39987, carries a CVSS score of 9.8 (Critical) and is confirmed actively exploited in the wild by CISA’s Known Exploited Vulnerabilities (KEV) catalog.
Affected Product and Version
All Marimo versions prior to 0.23.0 are vulnerable. This includes any deployment using the built-in WebSocket server for terminal functionality.
Vulnerability Details
The /terminal/ws WebSocket endpoint fails to enforce authentication checks. While other WebSocket endpoints (such as /ws) correctly call validate_auth() to verify user identity, the terminal endpoint only checks the application’s running mode and platform support before accepting any connection. An unauthenticated attacker can connect to this endpoint and obtain a fully interactive PTY (pseudo-terminal) shell, enabling arbitrary command execution on the host system.
The exploitation requires no user interaction, no privileges, and can be conducted over the network. The attack complexity is low, meaning standard tooling can automate exploitation.
Impact
Successful exploitation gives an attacker complete control over the affected server. They can:
- Execute arbitrary system commands as the Marimo process user
- Access or exfiltrate any data accessible to that user
- Install malware, including ransomware or cryptocurrency miners
- Pivot to internal network resources
Given the confirmed active exploitation, any internet-facing Marimo instance prior to 0.23.0 should be considered compromised until proven otherwise.
Remediation
Immediate Action
- Update Immediately: Upgrade to Marimo version 0.23.0 or later. This is the only complete fix.
- Isolate Affected Systems: If updating is not immediately possible, restrict network access to the
/terminal/wsendpoint using a reverse proxy or firewall rules. - Conduct Incident Response: Scan for signs of compromise on any systems that were running vulnerable versions, particularly those exposed to the internet.
Verification
After updating, verify that the /terminal/ws endpoint now requires authentication by attempting to connect without valid credentials. The connection should be rejected.
Security Insight
This vulnerability highlights a critical design flaw: authentication checks must be consistently applied across all sensitive endpoints, not selectively implemented. The CVE-2026-39987 pattern–where one WebSocket path omits the auth check that other paths include–is a recurring finding in web applications. Developers should implement centralized authentication middleware rather than relying on individual endpoint handlers to verify credentials. For organizations running Python notebook environments, this incident reinforces that interactive terminal features should never be accessible without authentication, even in internal deployments.
For the latest cybersecurity news and data breach reports, visit security news and breach reports.
Further Reading
Never miss a critical vulnerability
Get real-time security alerts delivered to your preferred platform.
Public PoC References
Unverified third-party code
These repositories are publicly listed on GitHub and have not been audited by Yazoul Security. They may contain malware, backdoors, destructive payloads, or operational security risks (telemetry, exfiltration). Treat them as hostile binaries. Inspect source before execution. Run only in isolated, disposable lab environments (offline VM, no credentials, no production data).
Authorized use only. This information is provided for defensive research, detection engineering, and patch validation. Using exploit code against systems you do not own or do not have explicit written permission to test is illegal in most jurisdictions and violates Yazoul's terms of use.
| Repository | Stars |
|---|---|
| 0xBlackash/CVE-2026-39987 CVE-2026-39987 | ★ 0 |
| fevar54/marimo_CVE-2026-39987_RCE_PoC CVE-2026-39987 - Marimo < 0.23.0 Pre-Auth RCE (WebSocket) PoC de explotación - Conecta a /terminal/ws sin autenticación Author: Fevar54 Date: 2026-04-13 Severity: CRITICAL CVSS: 9.3 | ★ 0 |
| keraattin/CVE-2026-39987 CVE-2026-39987: Marimo Python Notebook Pre-Auth RCE (CVSS 9.3). Python & Nmap NSE detection scripts. Missing authentication on /terminal/ws WebSocket endpoint gives attackers a full PTY shell without | ★ 0 |
| Nxploited/CVE-2026-39987 marimo is a reactive Python notebook. Prior to 0.23.0, Marimo has a Pre-Auth RCE vulnerability | ★ 0 |
| h3raklez/CVE-2026-39987 Marimo Pre-Auth RCE | ★ 0 |
Showing 5 of 5 known references. Source: nomi-sec/PoC-in-GitHub.
Related Advisories
WordPress MStore API 2.0.6 contains an arbitrary file upload vulnerability that allows unauthenticated attackers to upload malicious files by sending POST requests to the REST API endpoint. Attackers ...
OpenCATS 0.9.4 contains a remote code execution vulnerability that allows unauthenticated attackers to execute arbitrary commands by uploading malicious PHP files disguised as resume attachments. Atta...
Arelle before 2.39.10 contains an unauthenticated remote code execution vulnerability in the /rest/configure REST endpoint that accepts a plugins query parameter and forwards it to the plugin manager ...
OneUptime is an open-source monitoring and observability platform. Prior to version 10.0.42, unauthenticated access to Notification test and Phone Number management endpoints allows SMS/Call/Email/Wha...