Du betrachtest gerade CVE-2026-75149: Code Injection in marimo-Notebooks via MCP-Server-Konfiguration

CVE-2026-75149: Code Injection in marimo-Notebooks via MCP-Server-Konfiguration

Was passiert, wenn einfaches Öffnen einer Python-Notebook-Datei ausreicht, um Schadcode auf dem Rechner auszuführen? Die jüngst veröffentlichte Schwachstelle CVE-2026-75149 im populären Open-Source-Notebook marimo macht genau das möglich: Ein Angreifer kann über einen präparierten MCP-Server-Eintrag im Notebook beliebige Kommandos als lokaler Subprozess starten – noch bevor eine Zelle ausgeführt wird und ohne jegliche Authentifizierung. Betroffen sind alle Versionen vor 0.23.15. Der Hersteller hat am 23. Juli 2026 mit Pull Request #10281 und Commit 1a21bd71 die nötige Härtung der PEP-723-Konfiguration nachgeliefert. In diesem Artikel analysieren wir die technischen Details, die konkreten Angriffswege und die umfassenden Schutzmaßnahmen für Entwickler, Data-Science-Teams und Sicherheitsverantwortliche.

Was ist marimo und warum ist diese Lücke brisant?

marimo als reactives Python-Notebook für KI-Workflows

marimo ist ein alternatives, reaktives Notebook für Python, das seinen Code als reine Python-Datei speichert und sich besonders für datengetriebene sowie KI-gestützte Workflows eignet. Anders als Jupyter-Notebooks garantiert marimo Konsistenz zwischen Code, Ausgaben und Programmzustand. Die Software ist Open Source, hat auf GitHub über 20.000 Sterne und wird zunehmend in Data-Science-, ML- und Agent-Projekten eingesetzt. Genau dort, wo Notebooks häufig mit externen Tools und Model Context Protocol (MCP)-Servern verknüpft werden, entsteht durch CVE-2026-75149 eine neue Angriffsfläche. Weil Notebooks in diesen Teams wie normale Dokumente behandelt werden, unterschätzt die Gefahr oft niemand.

Warum Code Injection in Notebook-Konfigurationen besonders tückisch ist

PEP-723 erlaubt es Python-Skripten, Inline-Metadaten in Form eines /// script-Blocks am Dateikopf zu hinterlegen. Diese Metadaten können unter anderem Paketabhängigkeiten, Interpreter-Konfigurationen oder eben auch MCP-Server-Einträge definieren. Da die Datei beim Öffnen im Edit-Modus automatisch geparst wird, kann ein bösartiger Eintrag bereits beim Laden des Notebooks aktiv werden. Der Angriff erfordert weder Netzwerkzugriff noch Credentials – er funktioniert rein lokal, sobald das Opfer die manipulierte .py-Datei in marimo öffnet. Das macht die Schwachstelle besonders unangenehm, denn herkömmliche Netzwerkabwehrmaßnahmen greifen hier nicht.

Technische Details von CVE-2026-75149

Angriffsvektor: Bösartiger MCP-Server-Eintrag im Notebook

Der NVD-Eintrag (CVE-2026-75149, veröffentlicht am 19. August 2026) beschreibt die Schwachstelle als Code Injection im Notebook-Konfigurations-Handler. Ein Angreifer versieht ein marimo-Notebook mit einem präparierten MCP-Server-Eintrag, dessen command-Wert von ihm kontrolliert wird. Sobald das Notebook im Edit-Modus geöffnet wird, startet marimo diesen Befehl als lokalen Subprozess, bevor überhaupt eine Notebook-Zelle ausgeführt wird. Laut VulnCheck-Advisory und der NVD-Beschreibung ist keine Authentifizierung erforderlich, und der Angriff lässt sich durch einfaches Öffnen der Datei auslösen. VulnCheck sowie das Debian Security Tracker ordnen die Schwachstelle der Kategorie CWE-94 (Improper Control of Generation of Code) zu.

CVSS-Bewertung und Schwere

Die Bewertung fällt je nach CVSS-Version unterschiedlich, aber in beiden Fällen als High ein:

CVSS-Version Base-Score Severity Quelle
CVSS 4.0 8.7 von 10 High Rapid7, NVD JSON API
CVSS 3.1 8.8 von 10 High Rapid7, NVD JSON API

Der Vektor in CVSS 3.1 lautet CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H, in CVSS 4.0 CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N. Beide Formeln zeigen: Der Angriff ist über das Netzwerk möglich (AV:N), erfordert wenig Komplexität (AC:L) und keine Privilegien (PR:N), aber eine Benutzerinteraktion beim Öffnen der Datei (UI:R bzw. UI:P). Vertraulichkeit, Integrität und Verfügbarkeit sind jeweils als High bewertet. Laut Rapid7 liegt der EPSS-Score bei etwa 1 % (48. Perzentil), ein öffentlicher Exploit war zum Zeitpunkt der Analyse noch nicht verfügbar.

Betroffene Versionen und Patch

Alle Versionen vor 0.23.15 sind anfällig

Die CVE-Daten nennen als betroffenes Produkt marimo-team/marimo in allen Versionen ab Version 0 bis ausschließlich 0.23.15. Der Fix ist Teil der Version 0.23.15, die am 23. Juli 2026 auf GitHub veröffentlicht wurde. In den Release-Notes fällt der Sicherheitsaspekt unter der Überschrift “Bug fixes” und wird explizit als Härtung der PEP-723-Konfigurationsoptionen bezeichnet. Entscheidend ist Commit 1a21bd71: Er führt ein striktes Allowlisting für erlaubte tool.marimo-Top-Level-Schlüssel in Notebook-Metadaten ein und entfernt sensitive Optionen wie ai, mcp, completion, secrets und server aus dem anfälligen Parser.

Was der Patch konkret ändert

Der Commit ergänzt in marimo/_config/reader.py die Konstante ALLOWED_SCRIPT_CONFIG_TOP_KEYS sowie eine Funktion allowlist_script_config. Nur noch explizit erlaubte Konfigurationsbereiche dürfen aus PEP-723-Metadaten übernommen werden; alles andere wird verworfen oder ignoriert. Damit wird verhindert, dass ein Angreifer über Notebook-Metadaten externe Befehle oder URLs einschleusen kann. Zusätzlich werden die Schlüssel runtime.auto_instantiate und experimental.isolate_apps aus Sicherheitsgründen ebenfalls entfernt, weil sie das Verhalten des Notebooks beim Laden verändern könnten. Der Patch umfasst 192 Code-Einfügungen und acht Löschungen in drei Dateien und führt neue Unit-Tests für die Bereinigung von Notebook-Konfigurationen ein.

Hintergrund: PEP-723 und Model Context Protocol

Wie PEP-723-Inline-Metadaten funktionieren

PEP-723 wurde eingeführt, um Python-Skripten eine deklarative Möglichkeit zur Paketverwaltung und Konfiguration zu geben, ohne ein separates pyproject.toml zu benötigen. Ein Skript kann direkt am Dateianfang einen speziellen Kommentarblock enthalten, der TOML-artige Konfigurationen aufnimmt. Tools wie uv run oder marimo lesen diesen Block aus, installieren Abhängigkeiten und konfigurieren das Laufzeitverhalten. Dieser Komfort birgt allerdings ein grundlegendes Sicherheitsproblem: Die Metadaten sind Teil der Datei, die der Benutzer herunterlädt und öffnet. Wenn ein Tool diese Metadaten vertrauensvoll übernimmt, können Angreifer über scheinbar harmlose Kommentarzeilen mächtige Aktionen auslösen. Genau diese Vertrauensannahme wird bei CVE-2026-75149 ausgenutzt.

Model Context Protocol: Ein neuer Standard mit altem Problem

Das Model Context Protocol (MCP), von Anthropic initiiert und mittlerweile von vielen KI-Tools unterstützt, definiert eine universelle Schnittstelle, über die KI-Agenten mit externen Datenquellen und Werkzeugen kommunizieren. Ein MCP-Server kann Datenbankabfragen, Dateisystemzugriffe, Web-APIs oder andere Aktionen bereitstellen. In marimo können solche Server über die Konfiguration eingebunden werden, damit Zellen mit externen Tools interagieren. CVE-2026-75149 zeigt, dass bereits die Konfiguration selbst – also die bloße Definition eines MCP-Servers – ausreicht, um Code auszuführen, wenn der Parser den command-Wert nicht hinreichend validiert. Damit reiht sich die Lücke in eine wachsende Klasse von Schwachstellen ein, bei denen Konfigurationsdateien als Angriffsvektor missbraucht werden.

Praktische Angriffsszenarien

Szenario 1: Geteiltes Notebook über E-Mail oder Chat

Ein Angreifer verpackt einen bösartigen command in einem marimo-Notebook und schickt die Datei an Data-Scientist-Teams. Sobald ein Mitarbeiter die Datei aus Neugier oder im Vertrauen auf den Absender öffnet, läuft das Kommando auf seinem lokalen Rechner. Weil keine Zelle ausgeführt werden muss, fällt der Vorfall nicht sofort auf – das Notebook erscheint lediglich langsam beim Starten. Der Angreifer kann über diesen Subprozess beispielsweise Umgebungsvariablen auslesen, SSH-Schlüssel kopieren, lokale Dateien exfiltrieren oder Persistenzmechanismen etablieren. Unter Windows, Linux und macOS funktioniert der Angriff gleichermaßen, da marimo plattformunabhängig in Python läuft.

Szenario 2: Kompromittierte Repositories und Downloads

Ähnlich wie bei kompromittierten Python-Paketen auf PyPI oder npm kann ein Angreifer ein scheinbar nützliches Notebook in einem Repository, einer Dokumentation oder einem Download-Archiv platzieren. Wer das Notebook später lokal mit marimo öffnet, führt den eingebetteten Befehl aus. Diese Angriffskette ist besonders gefährlich, weil Notebooks häufig aus Blogs, Tutorials oder Kursunterlagen kopiert und direkt geöffnet werden. Ein beliebtes Tutorial-Repo, das stillschweigend ein bösartiges marimo-Notebook ergänzt, könnte innerhalb kurzer Zeit tausende Opfer erreichen.

Szenario 3: Supply-Chain-Angriff über gemeinsame Notebook-Templates

In Unternehmen werden oft standardisierte Notebook-Templates für Berichte, Modelltraining oder Datenanalyse verwendet. Wenn ein Angreifer Zugriff auf ein solches Template erhält – etwa über ein kompromittiertes internes Wiki oder einen gehackten MLOps-Store – kann er die Schwachstelle in allen Abteilungen ausrollen, die das Template nutzen. Da die meisten Anwender marimo mit ihren eigenen Benutzerrechten starten, erhält der Angreifer sofort Zugriff auf die im Benutzerkontext verfügbaren Daten und Systeme. In besonders kritischen Fällen, in denen Data Scientists mit Produktionsdaten arbeiten, kann das die Offenlegung personenbezogener Daten oder geistigen Eigentums zur Folge haben.

Schutzmaßnahmen für Admins und Entwickler

Sofortmaßnahme: Update auf marimo 0.23.15

Die wichtigste und einfachste Maßnahme ist das Update auf mindestens marimo 0.23.15. Administratoren sollten in Python-Umgebungen, in denen marimo installiert ist, die Version prüfen und gegebenenfalls zentral aktualisieren. In virtual environments genügt ein pip install --upgrade "marimo>=0.23.15". Für containerisierte oder CI/CD-basierte Workflows empfiehlt es sich, die Version explizit zu pinnen. Werden mehrere Projekte betreut, kann ein zentrales requirements.txt oder ein Lockfile die Kontrolle erleichtern. Nach dem Update sollte das Team prüfen, ob PEP-723-Metadaten in eigenen Notebooks weiterhin wie erwartet funktionieren, da der Patch einige bisher erlaubte Optionen entfernt.

Workflow-Härtung: Nicht vertrauenswürdige Notebooks isoliert öffnen

Bis alle Systeme gepatcht sind, sollten fremde oder nicht kryptografisch signierte marimo-Dateien nie im produktiven Benutzerkontext geöffnet werden. Idealerweise nutzt man für unbekannte Dateien eine Sandbox, einen Wegwerf-Container oder einen dedizierten, nicht-privilegierten Benutzer. Zusätzlich hilft eine Policy, Notebooks nur aus internen, versionierten Repositories zu laden. Wer regelmäßig Code Injection-Risiken in Agent- und Notebook-Umgebungen minimieren will, setzt am besten auf Least-Privilege und strikte Eingabevalidierung.

EDR, SIEM und Netzwerkmonitoring ergänzen

Sicherheitsteams können Endpoint-Detection-and-Response-Lösungen (EDR) so konfigurieren, dass ungewöhnliche Subprozess-Aufrufe aus marimo- oder Python-Prozessen Alarm auslösen. Typische Indikatoren sind plötzliche Shell-Spawns (bash, powershell.exe, cmd.exe) oder unerwartete Netzwerkverbindungen kurz nach dem Start von marimo. Im SIEM lassen sich Korrelationsregeln definieren, die das Öffnen unbekannter .py-Dateien mit darauffolgenden Prozess-Starts verknüpfen. Zusammen mit einer strikten Application-Control-Policy, die das Ausführen unbekannter Binärdateien blockiert, lässt sich die Angriffskette deutlich erschweren. Besonders wertvoll ist eine zeitnahe Alarmierung: Je früher das Sicherheitsteam einen ungewöhnlichen Subprozess bemerkt, desto geringer ist das Risiko einer erfolgreichen Datenexfiltration.

Checkliste für Sicherheitsverantwortliche

  • Inventarisieren: In welchen Umgebungen ist marimo installiert? Nutzen Sie pip list | grep marimo oder CMDB-Abfragen.
  • Version prüfen: Alle Instanzen unter 0.23.15 als kritisch markieren und priorisieren.
  • Update ausrollen: Zuerst Produktivsysteme, Workstations von Data Scientists und Shared-Server-Umgebungen.
  • Scan durchführen: Existierende .py-Notebooks auf ungewöhnliche PEP-723-Blöcke und MCP-Einträge untersuchen.
  • Nutzer schulen: Hinweise auf das Risiko fremder Notebooks und das “Nicht-Öffnen”-Prinzip.
  • Überwachen: EDR/SIEM-Regeln für ungewöhnliche Subprozesse aus marimo-Prozessen aktivieren.

Incident Response und Forensik

Was tun, wenn ein bösartiges Notebook geöffnet wurde?

Wenn ein Mitarbeiter ein unbekanntes marimo-Notebook geöffnet hat und Anomalien auftreten, sollte der betroffene Rechner vom Netzwerk isoliert werden, um eine weitere Ausbreitung zu verhindern. Anschließend prüft das Incident-Response-Team laufende Prozesse, kürzlich erstellte Dateien und Netzwerkverbindungen. Wichtig ist, den Zustand des Notebooks selbst zu sichern: Die PEP-723-Metadaten am Dateikopf enthalten den präparierten MCP-Eintrag und damit den ausgeführten Befehl. Ein head -n 50 notebook.py reicht meist, um die Schadkonfiguration zu dokumentieren.

Forensische Artefakte und Log-Quellen

Auf Linux- und macOS-Systemen lassen sich Prozessstarts über Auditd, eBPF-Tracer oder das Shell-History-File nachvollziehen. Unter Windows helfen Event IDs 4688 (Prozesserstellung) und 1 (Sysmon). Da marimo beim Öffnen eines Notebooks Python-Subprozesse startet, finden sich die Spuren in den Prozess-Logs des Betriebssystems. Zusätzlich sollten Netzwerk-Logs geprüft werden: Ein bösartiger command könnte eine Reverse-Shell oder einen Daten-Exfiltrations-Kanal zu einem externen Server aufbauen. Wer die Zeit zwischen Notebook-Start und erstem Netzwerk-Event korrelieren kann, erhält eine klare Angriffszeitlinie.

Fazit und Handlungsempfehlung

CVE-2026-75149 zeigt, dass selbst moderne, reaktive Notebooks wie marimo nicht frei von Code-Injection-Risiken sind. Die Verknüpfung mit MCP-Servern erweitert den Funktionsumfang, schafft aber gleichzeitig neue Angriffsvektoren über anfällige Konfigurationsparser. Mit einem CVSS-Base-Score von 8.8 (v3.1) bzw. 8.7 (v4.0) und der Tatsache, dass lediglich das Öffnen einer Datei ausreicht, um Schadcode auszuführen, ist die Schwachstelle als High-Risk einzustufen. Der Hersteller liefert mit Version 0.23.15 einen sauberen Patch, der die betroffenen Konfigurationsoptionen allowlistet. Betroffene Teams sollten umgehend aktualisieren, ihre Notebook-Workflows auf Vertrauenswürdigkeit und Isolation prüfen und Incident-Response-Pläne auf diese neue Angriffsart vorbereiten. Eine schnelle Reaktion reduziert nicht nur den Schaden, sondern verhindert auch, dass sich der Angriff auf andere Systeme oder Teammitglieder ausbreitet.

Quellen: NVD JSON API für CVE-2026-75149, VulnCheck Advisory, Rapid7 Vulnerability Database, The Hacker Wire, marimo Release 0.23.15 und GitHub PR #10281.