{"id":"CVE-2026-39987","published":"2026-04-09T18:17:02Z","modified":"2026-06-17T10:42:51Z","title":"Marimo Remote Code Execution Vulnerability","vendor":"Marimo","product":"Marimo","tier":"core","eol":null,"description":{"text":"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.","provenance":"source","from":"NVD"},"summary":{"text":"The Marimo reactive Python notebook, prior to 0.23.0, has a missing authentication check on its terminal WebSocket endpoint /terminal/ws, which only verifies running mode and platform support before accepting connections. An unauthenticated remote attacker can connect to this endpoint to obtain a full PTY shell and execute arbitrary system commands, requiring no privileges or user interaction.","provenance":"ai","model":"claude-haiku-5-5","generatedAt":"2026-10-29T08:31:55Z"},"cvss":{"score":9.8,"severity":"CRITICAL","version":"3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","provenance":"source","from":"NVD"},"epss":{"score":0.99564,"percentile":0.99946,"date":"2026-10-30","provenance":"source"},"kev":{"dateAdded":"2026-04-23","dueDate":"2026-05-07","ransomware":false,"requiredAction":"Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.","notes":"https://github.com/marimo-team/marimo/security/advisories/GHSA-2679-6mx9-h9xc ; https://nvd.nist.gov/vuln/detail/CVE-2026-39987","provenance":"source"},"vulncheckKev":{"dateAdded":"2026-04-09","exploitedFirstSeen":"2026-04-09","ransomware":false,"evidence":[{"url":"https://www.endorlabs.com/learn/root-in-one-request-marimos-critical-pre-auth-rce-cve-2026-39987","date":"2026-04-09"},{"url":"https://webflow.sysdig.com/blog/cve-2026-39987-update-how-attackers-weaponized-marimo-to-deploy-a-blockchain-botnet-via-huggingface","date":"2026-04-15"},{"url":"https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json","date":"2026-04-23"},{"url":"https://www.sysdig.com/blog/ai-agent-at-the-wheel-how-an-attacker-used-llms-to-move-from-a-cve-to-an-internal-database-in-4-pivots","date":"2026-05-26"},{"url":"https://www.proofpoint.com/us/blog/threat-insight/more-cves-same-playbook-2026-vulnerability-exploitation-wild","date":"2026-05-27"},{"url":"https://webflow.sysdig.com/blog/security-briefing-may-2026","date":"2026-06-02"},{"url":"https://webflow.sysdig.com/blog/agentic-threat-actor-hits-the-orchestration-plane-ai-agent-driven-container-escape","date":"2026-06-04"},{"url":"https://ptsecurity.com/research/analytics/web-applications-and-development-infrastructure-threatscape-2026-2027-trends-and-forecasts/","date":"2026-06-17"},{"url":"https://moonlock.com/mid-2026-macos-threat-report","date":"2026-07-16"},{"url":"https://unit42.paloaltonetworks.com/autonomous-ai-cyber-attack-campaign/","date":"2026-07-30"}],"evidenceTotal":16,"provenance":"source"},"exploited":true,"otx":{"pulseCount":50,"pulses":[{"name":"Actively_Exploited_Kev | Oct 31, 2026","url":"https://otx.alienvault.com/pulse/6ae4aefab0c2191cecd41862","created":"2026-10-30"},{"name":"Actively_Exploited_Kev | Oct 30, 2026","url":"https://otx.alienvault.com/pulse/6ae35d889ea92b4ce19c2680","created":"2026-10-29"},{"name":"Actively_Exploited_Kev | Oct 29, 2026","url":"https://otx.alienvault.com/pulse/6ae20c1db17e7057ae7d9ad1","created":"2026-10-28"},{"name":"Actively_Exploited_Kev | Oct 28, 2026","url":"https://otx.alienvault.com/pulse/6ae0ba7e0e2a97ff7b218819","created":"2026-10-27"},{"name":"Actively_Exploited_Kev | Oct 27, 2026","url":"https://otx.alienvault.com/pulse/6adf68b85c3e852f3c111d18","created":"2026-10-26"},{"name":"Actively_Exploited_Kev | Oct 24, 2026","url":"https://otx.alienvault.com/pulse/6adb740e397c3ad4799aa4cd","created":"2026-10-23"},{"name":"Actively_Exploited_Kev | Oct 23, 2026","url":"https://otx.alienvault.com/pulse/6ada236fcfba2dfa730ea482","created":"2026-10-22"},{"name":"Actively_Exploited_Kev | Oct 22, 2026","url":"https://otx.alienvault.com/pulse/6ad8d33a077cbb5cab524d80","created":"2026-10-21"},{"name":"Actively_Exploited_Kev | Oct 21, 2026","url":"https://otx.alienvault.com/pulse/6ad78130c4d1ac2be83a8b6d","created":"2026-10-20"},{"name":"Actively_Exploited_Kev | Oct 20, 2026","url":"https://otx.alienvault.com/pulse/6ad62f63c24a405a3423cc13","created":"2026-10-19"}],"provenance":"machine"},"cwes":[{"id":"CWE-306","name":"Missing Authentication for Critical Functionality"}],"references":[{"url":"https://github.com/marimo-team/marimo/commit/c24d4806398f30be6b12acd6c60d1d7c68cfd12a","tags":["Patch"]},{"url":"https://github.com/marimo-team/marimo/pull/9098","tags":["Issue Tracking","Patch"]},{"url":"https://github.com/marimo-team/marimo/security/advisories/GHSA-2679-6mx9-h9xc","tags":["Exploit","Mitigation","Vendor Advisory"]},{"url":"https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-39987","tags":["US Government Resource"]},{"url":"https://www.sysdig.com/blog/marimo-oss-python-notebook-rce-from-disclosure-to-exploitation-in-under-10-hours","tags":["Exploit","Third Party Advisory"]}],"techniques":[{"id":"T1190","name":"Exploit Public-Facing Application","tactics":["initial-access"],"provenance":"ai","basis":"ai-mapping","bases":["ai-mapping"],"basisDetail":"claude-haiku-5-5: Unauthenticated network exploitation of public-facing endpoint","mappingType":"exploitation_technique","evidence":[{"from":"description","quote":"The terminal WebSocket endpoint /terminal/ws lacks authentication validation","start":96,"end":172}],"model":"claude-haiku-5-5","confidence":"medium","confidenceNote":"AI-mapped from the description (quote-validated, not expert-reviewed)"},{"id":"T1059","name":"Command and Scripting Interpreter","tactics":["execution"],"provenance":"ai","basis":"ai-mapping","bases":["ai-mapping"],"basisDetail":"claude-haiku-5-5: Full PTY shell enables arbitrary command execution","mappingType":"primary_impact","evidence":[{"from":"description","quote":"allowing an unauthenticated attacker to obtain a full PTY shell and execute arbitrary system commands","start":174,"end":275}],"model":"claude-haiku-5-5","confidence":"medium","confidenceNote":"AI-mapped from the description (quote-validated, not expert-reviewed)"}],"reports":[],"affected":[{"ecosystem":"PyPI","package":"marimo","vulnerableRanges":["<0.23.0"],"patched":["0.23.0"],"from":["GHSA-2679-6mx9-h9xc","PYSEC-2026-407"],"provenance":"source"}],"advisories":[{"id":"GHSA-2679-6mx9-h9xc","url":"https://github.com/advisories/GHSA-2679-6mx9-h9xc","severity":"CRITICAL","ecosystem":"PyPI","package":"marimo","vulnerableRanges":["<0.23.0"],"patched":["0.23.0"],"provenance":"source","from":"GHSA"}],"euvd":{"id":"EUVD-2026-20980","url":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-20980","exploited":true,"exploitedSince":"2026-04-23","provenance":"source"},"exploits":[{"id":52673,"url":"https://www.exploit-db.com/exploits/52673","title":"Marimo  0.20.4 - RCE","type":"webapps","platform":"multiple","date":"2026-09-02","verified":false,"provenance":"source"}],"exploitSources":{"exploitdb":{"count":1,"earliest":"2026-09-02"},"pocGithub":{"count":26,"skipped":3,"earliest":"2026-04-12","earliestUrl":"https://github.com/0xBlackash/CVE-2026-39987","repos":[{"name":"Th3Purge/CVE-2026-39987","url":"https://github.com/Th3Purge/CVE-2026-39987","stars":9,"created":"2026-09-08"},{"name":"M3PH1569/CVE-2026-39987-POC","url":"https://github.com/M3PH1569/CVE-2026-39987-POC","stars":5,"created":"2026-05-24"},{"name":"keraattin/CVE-2026-39987","url":"https://github.com/keraattin/CVE-2026-39987","stars":1,"created":"2026-04-15"},{"name":"Nxploited/CVE-2026-39987","url":"https://github.com/Nxploited/CVE-2026-39987","stars":1,"created":"2026-04-18"},{"name":"h3raklez/CVE-2026-39987","url":"https://github.com/h3raklez/CVE-2026-39987","stars":1,"created":"2026-04-25"}]},"nuclei":[{"id":"CVE-2026-39987","name":"Marimo <= 0.20.4 - Pre-Auth Terminal WebSocket RCE","severity":"critical","path":"javascript/cves/2026/CVE-2026-39987.yaml","url":"https://github.com/projectdiscovery/nuclei-templates/blob/main/javascript/cves/2026/CVE-2026-39987.yaml"}],"first":{"date":"2026-04-12","source":"PoC-in-GitHub","url":"https://github.com/0xBlackash/CVE-2026-39987"},"provenance":"source"},"exploitRefs":["https://github.com/marimo-team/marimo/security/advisories/GHSA-2679-6mx9-h9xc","https://www.sysdig.com/blog/marimo-oss-python-notebook-rce-from-disclosure-to-exploitation-in-under-10-hours"],"flow":[{"stage":"exploitation","techniques":["T1190"],"provenance":"ai"},{"stage":"primary","techniques":["T1059"],"provenance":"ai"}],"timeline":[{"date":"2026-04-09","kind":"published","label":"Published (NVD)","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-39987","provenance":"source"},{"date":"2026-04-09","kind":"exploited-reported","label":"Exploitation first reported (VulnCheck KEV evidence)","url":"https://www.endorlabs.com/learn/root-in-one-request-marimos-critical-pre-auth-rce-cve-2026-39987","provenance":"source"},{"date":"2026-04-12","kind":"exploit-public","label":"First public exploit: PoC-in-GitHub; later: Exploit-DB 2026-09-02","url":"https://github.com/0xBlackash/CVE-2026-39987","provenance":"source"},{"date":"2026-04-23","kind":"kev","label":"Added to CISA KEV","url":"https://www.cisa.gov/known-exploited-vulnerabilities-catalog","provenance":"source"},{"date":"2026-04-23","kind":"euvd-exploited","label":"ENISA EUVD: exploited","url":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-20980","provenance":"source"}],"speed":{"daysToPublicExploit":3,"firstExploitFrom":"PoC-in-GitHub","daysToKev":14},"priority":{"score":74.8,"factors":[{"name":"In a KEV catalog","points":35.0,"detail":"listed in CISA KEV and VulnCheck KEV"},{"name":"Recent KEV listing","points":5.0,"detail":"added 205 days ago"},{"name":"Known ransomware use","points":0.0,"detail":"not known"},{"name":"EPSS percentile","points":19.99,"detail":"percentile 0.9995"},{"name":"Named in threat reports","points":0.0,"detail":"0 reports"},{"name":"Public exploit code","points":5.0,"detail":"2 NVD references tagged Exploit; 1 Exploit-DB entry; 26 PoC-in-GitHub repos; 1 nuclei template"},{"name":"Mentioned in OTX pulses","points":3.0,"detail":"50 pulses"},{"name":"CVSS severity","points":6.86,"detail":"base score 9.8"},{"name":"End-of-life product","points":0.0,"detail":"supported or unknown"}]},"lineage":{"packageHistory":[{"cve":"CVE-2026-39987","published":"2026-04-09","fixed":"0.23.0","kev":true},{"cve":"CVE-2026-54386","published":"2026-06-17","fixed":"0.23.9","kev":false,"link":{"from":"CVE-2026-39987","to":"CVE-2026-54386","relation":"successor","confidence":"low","kind":"sequence","evidence":[{"kind":"version-step","provenance":"source","package":"PyPI:marimo","fromFixed":"0.23.0","toFixed":"0.23.9","daysApart":69}]}}],"package":"PyPI:marimo"}}