
Von MCPJam Inspector RCE bis Root — CVE-2026-23744, JupyterLab-Token-Offenlegung, Kernel-Ausführung und OPSMCP-Privilegieneskalation
Dieses Repository ist ausschließlich für autorisierte Sicherheitsforschung, Penetrationstests und Bildungszwecke bestimmt. Verwenden Sie die hier beschriebenen Techniken nicht gegen Systeme ohne ausdrückliche Genehmigung.
Von MCPJam-Inspector-RCE bis root — CVE-2026-23744, JupyterLab-Token-Offenlegung, Kernel-Ausführung und OPSMCP-Privilegienerweiterung.
Dieses Repository dokumentiert eine vollständige Linux-Angriffskette, von einer exponierten MCPJam Inspector-Instanz bis hin zum Root-Zugriff.
Die Kette verknüpft Schwachstellen in Entwicklerwerkzeugen, lokalen Diensten, dem Umgang mit Anmeldedaten und der Anwendungsautorisierung:
MCPJam Inspector
│ CVE-2026-23744
▼
RCE
│
▼
JupyterLab Token
│
▼
Jupyter Kernel
│
▼
User
│
▼
OPSMCP API
│
▼
Hidden Admin Tool
│
▼
Root Credential
│
▼
root
[!WARNING] Dieses Repository ist ausschließlich für autorisierte Sicherheitsforschung, Penetrationstests und Bildungszwecke bestimmt. Zieladressen, Anmeldedaten, Token und andere umgebungsspezifische Werte in diesem Dokument wurden geschwärzt oder durch Labor-Platzhalter ersetzt.
Die erste Aufklärung konzentriert sich auf die Identifizierung extern exponierter Dienste.
nmap -sC -sV -oN nmap_initial.txt TARGET
Anschließend kann ein vollständiger TCP-Scan durchgeführt werden:
nmap -p- --min-rate 5000 -oN nmap_full.txt TARGET
Relevante externe Dienste:
| Port | Service | Rolle |
|---|---|---|
| 22 | SSH | Fernadministration |
| 6274 | MCPJam Inspector | Erste Angriffsfläche |
Nur an localhost gebundene Dienste:
| Port | Service | Privileg |
|---|---|---|
| 8888 | JupyterLab | User |
| 5000 | OPSMCP | root |
Der extern erreichbare MCPJam Inspector auf Port 6274 wird zum ersten Einstiegspunkt.
Die exponierte MCPJam-Inspector-Instanz ist von CVE-2026-23744 betroffen.
MCPJam Inspector ist in erster Linie als Entwicklungs- und Testschnittstelle für MCP-Server gedacht. Die Schwachstelle wird besonders gefährlich, wenn diese Schnittstelle einem nicht vertrauenswürdigen Netzwerk ausgesetzt ist — ein angreifbarer Konfigurationsablauf ermöglicht es, dass vom Angreifer kontrollierte Daten einen Befehlsausführungspfad erreichen.
Remote Request
│
▼
MCP Server Configuration
│
▼
Command Execution
│
▼
Initial Shell
Die Schwachstelle betrifft MCPJam-Inspector-Versionen bis einschließlich 1.4.2. Für autorisierte Tests kann ein öffentlicher Proof of Concept verwendet werden, um die Schwachstelle gegen die Zielumgebung zu validieren.
Nach erfolgreicher Ausnutzung den Ausführungskontext bestätigen:
id
whoami
hostname
Sobald der erste Zugriff erlangt wurde, werden lokale Dienste sichtbar.
ss -tlnp
ps aux | grep -E 'jupyter|python|node'
Network
│
▼
MCPJam Inspector
:6274
│
▼
Initial RCE
│
┌─────────┴─────────┐
▼ ▼
JupyterLab OPSMCP
:8888/local :5000/local
│ │
▼ ▼
User root
Der Privilegienunterschied zwischen den beiden internen Anwendungen ist besonders interessant.
Der JupyterLab-Prozess wurde mit seinem Authentifizierungstoken direkt in der Befehlszeile gestartet:
--ServerApp.token=<JUPYTER_TOKEN>
Die Befehlszeile kann wie folgt eingesehen werden:
ps aux | grep jupyter
# or
cat /proc/<PID>/cmdline
Dies verdeutlicht ein häufiges Problem beim Umgang mit Geheimnissen:
Secret → Command-line argument → Process metadata → Local credential disclosure
Das wiederhergestellte Token gewährt Zugriff auf die lokale Jupyter-API.
Jupyter stellt eine REST-API zur Verwaltung von Kernels bereit. Nach der Authentifizierung mit dem wiederhergestellten Token kann ein Kernel erstellt werden über:
POST /api/kernels
Die Antwort enthält eine Kernel-UUID. Jupyter-Kernels kommunizieren über WebSockets:
/api/kernels/<KERNEL_ID>/channels
Das Jupyter-Nachrichtenprotokoll verwendet eine execute_request-Nachricht zur Ausführung von Python-Code:
{
"header": { "msg_type": "execute_request" },
"content": { "code": "<AUTHORIZED_LAB_CODE>" }
}
Dies ermöglicht die Python-Ausführung unter der Identität des Jupyter-Dienstes — in dieser Umgebung führt der Kernel als User aus.
MCPJam RCE → JupyterLab → User
Mit einer verfügbaren Benutzer-Shell besteht der nächste Schritt darin, lokal installierte Anwendungen zu untersuchen. Die OPSMCP-Anwendung befindet sich unter:
/opt/opsmcp/
Die Analyse des Quellcodes offenbart eine eingebettete API-Anmeldeinformation:
VALID_API_KEY = "<REDACTED_OPSMCP_API_KEY>"
Die Anwendung verwaltet außerdem zwei Tool-Sammlungen:
Sichtbare Tools
ops.system_statusops.list_servicesops.check_diskops.view_logsVersteckte Tools
ops._admin_dumpops._debug_modeDie administrativen Funktionen sind besonders interessant, da sie nicht über die normale Tool-Aufzählung zurückgegeben werden.
Nicht dokumentiert bedeutet nicht unzugänglich.
Das Backend registriert die versteckten Tools weiterhin und akzeptiert ihre Namen über den generischen Mechanismus zur Tool-Ausführung.
Die Anwendung authentifiziert Anfragen mithilfe eines API-Schlüssels:
X-API-Key: <OPSMCP_API_KEY>
Nach der Authentifizierung prüft der Tool-Ausführungs-Endpoint nur, ob die angeforderte Funktion existiert — nicht, ob der Aufrufer berechtigt ist, sie auszuführen.
Was passiert:
API Key → Authenticated → Tool exists? → Execute
Was passieren sollte:
API Key → Authenticated → Permission check → Allowed → Execute
└ Denied → 403
Die versteckte administrative Funktion kann auf sensible Ressourcen im Besitz von root zugreifen.
Das administrative Tool akzeptiert ein Ziel, das die angeforderte Information beschreibt. Eine unterstützte Ressource ist der Root-SSH-Schlüssel:
{
"name": "ops._admin_dump",
"arguments": {
"target": "ssh_keys",
"confirm": true
}
}
Die Anwendung liest daraufhin den im Besitz von root befindlichen SSH-Privatschlüssel, was möglich ist, da OPSMCP als root läuft und /root/* lesen kann. Die Anwendung wird dadurch zu einer Primitive zur Offenlegung von Anmeldedaten.
Die wiederhergestellten SSH-Anmeldedaten des autorisierten Labors mit restriktiven Berechtigungen speichern:
chmod 600 <ROOT_KEY>
Den resultierenden Authentifizierungskontext überprüfen:
whoami
id
Endgültige Privilegienstufe: root 🎉
┌──────────────────────────────┐
│ MCPJam Inspector │
│ TCP/6274 │
└──────────────┬───────────────┘
│ CVE-2026-23744
▼
┌──────────────────────────────┐
│ Initial RCE │
└──────────────┬───────────────┘
▼
┌──────────────────────────────┐
│ JupyterLab │
│ 127.0.0.1:8888 │
└──────────────┬───────────────┘
│ Token disclosure
▼
┌──────────────────────────────┐
│ Jupyter Kernel │
│ WebSocket RCE │
└──────────────┬───────────────┘
▼
User
│ Source review
▼
┌──────────────────────────────┐
│ OPSMCP │
│ 127.0.0.1:5000 │
│ root │
└──────────────┬───────────────┘
│ API key + hidden tool
▼
┌──────────────────────────────┐
│ Root Credential Leak │
└──────────────┬───────────────┘
▼
root
| System | Worauf achten |
|---|
01 — Entwicklerwerkzeuge sind Angriffsfläche Werkzeuge, die für die lokale Entwicklung gedacht sind, können zu kritischen Schwachstellen werden, wenn sie einem nicht vertrauenswürdigen Netzwerk ausgesetzt sind.
02 — Jupyter-Tokens sind mächtige Anmeldedaten Der Zugriff auf ein Jupyter-Token kann viel mehr ermöglichen als nur UI-Zugriff — Kernel-APIs können beliebige Codeausführung ermöglichen.
03 — Versteckt bedeutet nicht sicher Ein undokumentierter Endpoint ist kein Autorisierungsmechanismus.
04 — Quellcode ist nach der Exploitation wertvoll Anwendungsquellcode kann sofort Authentifizierungsmechanismen, Geheimnisse, versteckte Funktionalität und Privilegiengrenzen offenlegen.
05 — Minimale Rechte können Angriffsketten unterbrechen Wenn OPSMCP als unprivilegiertes Dienstkonto gelaufen wäre, wäre die endgültige Auswirkung erheblich geringer gewesen.
Dieses Repository ist ausschließlich für autorisierte Sicherheitsforschung, Penetrationstests und Bildungszwecke bestimmt. Verwenden Sie die hier beschriebenen Techniken nicht gegen Systeme ohne ausdrückliche Genehmigung.
⚡ MCPJam → RCE → Jupyter → User → OPSMCP → root ⚡
| Schritt | Phase |
|---|
| 1 | MCPJam Inspector im Netzwerk exponiert |
| 2 | CVE-2026-23744 ausgenutzt |
| 3 | Erste RCE erreicht |
| 4 | JupyterLab-Token offengelegt |
| 5 | Jupyter-Kernel-Ausführung |
| 6 | Shell auf Benutzerebene |
| 7 | OPSMCP-Quellcode-Analyse |
| 8 | Hartkodierte API-Anmeldedaten entdeckt |
| 9 | Versteckte administrative Funktionalität missbraucht |
| 10 | Root-Anmeldedaten offengelegt |
| 11 | root |
| # | Schwachstelle | Auswirkung |
|---|
| 1 | Exponierter MCPJam Inspector | Remote-Angriffsfläche |
| 2 | CVE-2026-23744 | Erste RCE |
| 3 | Token in Prozessargumenten | Offenlegung von Anmeldedaten |
| 4 | Jupyter-Kernel-Zugriff | Codeausführung auf Benutzerebene |
| 5 | Lesbarer Anwendungsquellcode | Entdeckung von Anmeldedaten |
| 6 | Hartkodierter OPSMCP-API-Schlüssel | Umgehung der API-Authentifizierung |
| 7 | Versteckte Admin-Funktionalität | Privilegierte Operation |
| 8 | OPSMCP läuft als root | Vollständige Systemkompromittierung |
| MCPJam | Unerwartete Konfigurationsänderungen · verdächtige Kindprozesse · ungewöhnliche Remote-Clients |
| JupyterLab | Unerwartete Token-Nutzung · unerwartete Kernel-Erstellung · abnormale WebSocket-Verbindungen · von Kernels erzeugte Shell-Prozesse |
| OPSMCP | Aufruf undokumentierter Tools · anmeldedatenbezogene Anfragen · unerwartete API-Clients · administrative Operationen |
| SSH | Unerwartete Root-Anmeldungen · neue SSH-Schlüssel · ungewöhnliche Authentifizierungsquellen |