marimo is a reactive Python notebook. Prior to 0.23.0, Marimo has a Pre-Auth RCE vulnerability. The terminal WebSocket endpoint /terminal/ws lacks authentication validation, allowing an unauthenticated attacker to obtain a full PTY shell and execute arbitrary system commands. Unlike other WebSocket endpoints (e.g., /ws) that correctly call validate_auth() for authentication, the /terminal/ws endpoint only checks the running mode and platform support before accepting connections, completely skipping authentication verification. This vulnerability is fixed in 0.23.0.
CVE-2026-39987
Score elevated to 9.8 because this CVE is listed on the CISA Known Exploited Vulnerabilities catalog (added 2026-04-23), indicating real-world exploitation has been confirmed by US federal agencies. NVD baseline CVSS 9.8 retained for reference. Confidence: HIGH.
- Actively exploited in the wild (CISA-KEV)
No vendor fix yet — apply a workaround or compensating control (WAF / firewall / segmentation) and watch for a patch.
- CVSS v3
- 9.8
- EG Score
- 9.8(high)
- EG Risk
- 99(Act)EG Risk 99/100SSVC: Act
EG Risk is EchelonGraph's 0–100 priority score: it fuses intrinsic severity with real-world exploitation and automatability so you can rank equal-severity CVEs and fix the most dangerous first. Higher = act sooner. Distinct from the 0–10 EG Score (severity).
How it’s computedSeverity98% × 45%Exploitation100% × 40%Automatability100% × 15%Action: Fix now — active exploitation, automatable, high impact. - EPSS
- 99.9%
- KEV
- ⚠ Exploited
Published
April 9, 2026
Last Modified
April 23, 2026
Advisory Details (5)
Auto-updated May 11, 2026Marimo OSS Python Notebook RCE: From Disclosure to Exploitation in Under 10 Hours | Sysdig
https://www.sysdig.com/blog/marimo-oss-python-notebook-rce-from-disclosure-to-exploitation-in-under-10-hoursKnown Exploited Vulnerabilities Catalog | CISA
Known Exploited Vulnerabilities Catalog | CISA. Listed in CISA Known Exploited Vulnerabilities catalog.
https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-39987Pre-Auth Remote Code Execution via Terminal WebSocket Authentication Bypass · Advisory · marimo-team/marimo · GitHub
https://github.com/marimo-team/marimo/security/advisories/GHSA-2679-6mx9-h9xcfix: properly authenticate terminal route by mscolnick · Pull Request #9098 · marimo-team/marimo · GitHub
https://github.com/marimo-team/marimo/pull/9098fix: properly authenticate terminal route (#9098) · marimo-team/marimo@c24d480 · GitHub
https://github.com/marimo-team/marimo/commit/c24d4806398f30be6b12acd6c60d1d7c68cfd12aAffected Packages
(1 across 1 ecosystem)
PyPI(1)
| Package | Vulnerable range | Fixed in | Dependents |
|---|---|---|---|
| marimo | 0.0.0 ... 0.9.9 (370 versions) | 0.23.0 | — |
Weakness Classification(1)
MITRE Common Weakness Enumeration — the root-cause categories this CVE belongs to.
Data Freshness Timeline
(refreshed 5× in last 7d / 22× in last 30d)
Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.
- 2026-07-23 03:10 UTCEG score recompute
- 2026-07-23 00:04 UTCEG score recompute
- 2026-07-22 19:40 UTCCISA KEV update
- 2026-07-21 14:37 UTCCISA KEV update
- 2026-07-17 10:30 UTCEG score recompute
- 2026-07-16 17:04 UTCCISA KEV update
- 2026-07-15 16:49 UTCCISA KEV update
- 2026-07-15 15:04 UTCCISA KEV update
- 2026-07-15 02:00 UTCEPSS rescore
- 2026-07-14 18:05 UTCCISA KEV update
- 2026-07-13 17:07 UTCCISA KEV update
- 2026-07-10 17:52 UTCCISA KEV update
- 2026-07-07 19:01 UTCCISA KEV update
- 2026-07-07 17:16 UTCCISA KEV update
- 2026-07-01 19:16 UTCCISA KEV update
- 2026-07-01 15:06 UTCEPSS rescore
- 2026-06-30 23:22 UTCEPSS rescore
- 2026-06-29 19:12 UTCCISA KEV update
- 2026-06-25 19:15 UTCCISA KEV update
- 2026-06-25 13:49 UTCEPSS rescore
- 2026-06-25 13:49 UTCEPSS rescore
- 2026-06-23 21:33 UTCEPSS rescore
- 2026-06-23 17:44 UTCCISA KEV update
- 2026-06-18 16:13 UTCCISA KEV update
- 2026-06-17 17:53 UTCEPSS rescore
Show 53 moreShow fewer
- 2026-06-16 19:33 UTCCISA KEV update
- 2026-06-15 19:33 UTCCISA KEV update
- 2026-06-15 17:49 UTCEPSS rescore
- 2026-06-14 23:18 UTCEPSS rescore
- 2026-06-12 23:12 UTCEPSS rescore
- 2026-06-12 23:12 UTCEPSS rescore
- 2026-06-12 17:35 UTCCISA KEV update
- 2026-06-11 19:10 UTCCISA KEV update
- 2026-06-10 22:18 UTCEPSS rescore
- 2026-06-09 18:42 UTCCISA KEV update
- 2026-06-09 17:12 UTCCISA KEV update
- 2026-06-08 19:16 UTCCISA KEV update
- 2026-06-08 17:26 UTCCISA KEV update
- 2026-06-08 14:17 UTCEPSS rescore
- 2026-06-08 14:17 UTCEPSS rescore
- 2026-06-07 15:25 UTCEPSS rescore
- 2026-06-07 15:25 UTCEPSS rescore
- 2026-06-07 15:25 UTCEPSS rescore
- 2026-06-06 13:47 UTCEPSS rescore
- 2026-06-06 13:47 UTCEPSS rescore
- 2026-06-05 22:47 UTCEPSS rescore
- 2026-06-05 22:47 UTCEPSS rescore
- 2026-06-05 22:43 UTCCISA KEV update
- 2026-06-05 06:10 UTCEPSS rescore
- 2026-06-05 06:10 UTCEPSS rescore
- 2026-06-04 13:12 UTCEPSS rescore
- 2026-06-04 13:12 UTCEPSS rescore
- 2026-06-03 19:09 UTCCISA KEV update
- 2026-06-02 20:13 UTCEPSS rescore
- 2026-06-02 18:32 UTCCISA KEV update
- 2026-06-01 20:42 UTCCISA KEV update
- 2026-05-31 00:16 UTCEPSS rescore
- 2026-05-31 00:16 UTCEPSS rescore
- 2026-05-31 00:16 UTCEPSS rescore
- 2026-05-29 22:20 UTCCISA KEV update
- 2026-05-28 13:44 UTCEPSS rescore
- 2026-05-28 13:44 UTCEPSS rescore
- 2026-05-28 13:44 UTCEPSS rescore
- 2026-05-27 20:35 UTCCISA KEV update
- 2026-05-27 13:40 UTCEPSS rescore
- 2026-05-27 13:40 UTCEPSS rescore
- 2026-05-27 13:40 UTCEPSS rescore
- 2026-05-26 19:13 UTCCISA KEV update
- 2026-05-26 07:18 UTCEPSS rescore
- 2026-05-26 07:18 UTCEPSS rescore
- 2026-05-22 19:13 UTCCISA KEV update
- 2026-05-21 22:36 UTCCISA KEV update
- 2026-05-20 22:38 UTCEPSS rescore
- 2026-05-20 22:38 UTCEPSS rescore
- 2026-05-20 17:33 UTCCISA KEV update
- 2026-05-18 21:50 UTCEG score recompute
- 2026-05-18 21:22 UTCCISA KEV update
- 2026-05-18 21:22 UTCCISA KEV update
Publicly available exploits
(1 reference)Working exploit code is in the public domain. Defenders should treat patch urgency accordingly — public PoCs typically lead to mass-exploitation within 24-72 hours.
- Nucleijavascript/cves/2026/CVE-2026-39987.yamlFirst seen Jan 1, 2026
Marimo <= 0.20.4 - Pre-Auth Terminal WebSocket RCE
Open source ↗
Related CVEs(same CWE)
Same CWE
10 shownCWE-306
- CVE-2011-10013EG 10.0CRITICAL
- CVE-2014-125124EG 10.0CRITICAL
- CVE-2017-2637EG 10.0EPSS 91%CRITICAL
- CVE-2010-5326EG 10.0 KEVEPSS 97%CRITICAL
- CVE-2018-25134EG 9.8CRITICAL
- CVE-2012-10030EG 9.8CRITICAL
- CVE-2018-21132EG 9.8CRITICAL
- CVE-2014-3449EG 9.8CRITICAL
- CVE-2006-0062EG 9.8CRITICAL
- CVE-2006-0061EG 9.8CRITICAL
Frequently asked(6)
What is CVE-2026-39987?
When was CVE-2026-39987 disclosed?
Is CVE-2026-39987 actively exploited?
What is the CVSS score of CVE-2026-39987?
Which products are affected by CVE-2026-39987?
How do I remediate CVE-2026-39987?
Dependency Blast Radius
See which npm, PyPI, Go, and Maven packages are affected by CVE-2026-39987
Is Your Infrastructure Affected by CVE-2026-39987?
EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.