CVE record published for a marimo flaw where a notebook's own MCP server entry ran as a subprocess on open
VulnCheck published CVE-2026-75149 on 2026-08-19 for a code injection in marimo below 0.23.15. A notebook could embed an MCP server entry whose command value marimo launched as a local subprocess when the notebook was opened in edit mode, before any cell executed and with no authentication. The fix shipped 2026-07-23 as part of a broader PEP 723 sanitization pass.
VulnCheck published CVE-2026-75149 on 2026-08-19, recording a code injection in the marimo notebook environment that ran through its MCP server configuration. The affected range is everything below 0.23.15, which shipped on 2026-07-23, four weeks before the record appeared.
The vector is the notebook file itself. The record states that marimo's notebook configuration handler let an attacker supply a crafted MCP server entry with an attacker-controlled command value embedded in a notebook, and that opening that notebook in edit mode caused marimo to launch the specified command as a local subprocess. It happened before any notebook cell was executed and required no authentication, so the usual assumption that reviewing a notebook without running its cells is safe did not hold. Sharing a notebook file was enough to deliver the payload. VulnCheck scores it 8.7 high on CVSS 4.0 and 8.8 high on CVSS 3.1, with the user-interaction metric accounting for the need to open the file.
The pattern is worth separating from the more familiar one. Most MCP security records describe a server mistreating input it receives from a model or a caller. Here the MCP configuration itself was the payload, and the client-side program that read the configuration was the thing that executed it. Any host that reads server definitions out of a document supplied by someone else inherits the same question.
The fix is easy to miss in the project's own history. Pull request #10281, merged 2026-07-23, is titled "fix: additional pep 723 sanitization" and summarised as hardening of PEP 723 config options; it touches marimo's config manager and reader and does not mention MCP anywhere in its message. PEP 723 inline script metadata is the mechanism by which a notebook carries configuration, which is how an MCP server entry got there in the first place. The pull request is co-authored by Grg0rry, the same Gregory Tan the CVE record credits as reporter. marimo is now at 0.24.0, so the fixed line has already been superseded.
How was this verified, and what are the sources?
Published · last verified · confidence 1.00.
- CVE-2026-75149 CNA record, assigner VulnCheck, datePublished 2026-08-19T17:48:46Z - title "marimo < 0.23.15 Code Injection via MCP Server Configuration"; states marimo before 0.23.15 "contains a code injection vulnerability in the notebook configuration handler that allows attackers to execute arbitrary commands by supplying a crafted MCP server entry with an attacker-controlled command value embedded in a notebook", and that "When the notebook is opened in edit mode, marimo launches the specified command as a local subprocess before any notebook cell is executed, requiring no authentication or cell execution to trigger the vulnerability"; affected marimo-team marimo from 0 up to but excluding 0.23.15; CVSS 4.0 8.7 high and CVSS 3.1 8.8 high; credits Gregory Tan (Grg0rry); references the 0.23.15 release, pull request #10281 and commit 1a21bd71 - accessed
- marimo pull request #10281 "fix: additional pep 723 sanitization", merged 2026-07-23T13:11:32Z, commit 1a21bd71e258438d2511136b5edacc94c08855f4 dated 2026-07-23T13:11:31Z - summary reads "Hardening of pep 723 config options"; changes marimo/_config/manager.py and marimo/_config/reader.py with tests in tests/_config/; co-authored by Grg0rry, the reporter credited in the CVE record; the commit message does not mention MCP - accessed
- marimo release 0.23.15, published 2026-07-23 - the release carrying the fix, four weeks before the CVE record; PyPI metadata for marimo gives 0.24.0 as the current version, so the fixed line has since been superseded - accessed