
# Docker-Lab zum Vergleich verwundbarer und gepatchter Builds von MCPJam Inspector für CVE-2026-23744, das Unterschiede bei der Netzwerkbindung und API-Exposition für die pädagogische Sicherheitsforschung demonstriert.
Dieses Repository ist ein kleines Docker-Labor zum Vergleich eines verwundbaren mit einem gepatchten Build von MCPJam Inspector für CVE-2026-23744.
Es ist für Lernzwecke und den Aufbau eines öffentlichen Sicherheitsportfolios gedacht: schnelle Einrichtung, klare Beweise und Screenshots.
⚠️ Ethik / Umfang: Teste nur Systeme, die dir gehören oder für die du eine ausdrückliche Testgenehmigung hast. Dieses Repository dient der lokalen Reproduktion und Dokumentation.
/api/mcp/connect) existiert und antwortet im verwundbaren Setup ohne Authentifizierungsabfrage.Dies entspricht der Herstellerberatung / den öffentlichen Meldungen:
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── patched/
│ └── Dockerfile
└── docs/
└── (Screenshots kommen hierhin)
Beide Container bauen und starten:
docker compose up -d --build
Prüfen, ob sie laufen:
docker compose ps
Erwartet:
inspector_vuln_142 veröffentlicht auf 127.0.0.1:6274inspector_patched_143 veröffentlicht auf 127.0.0.1:6275 (aber er sollte vom Host aus nicht erreichbar sein)
Der Endpunkt ist vorhanden und antwortet mit einem Validierungsfehler, wenn Pflichtfelder fehlen:
curl -i -X POST http://127.0.0.1:6274/api/mcp/connect \
-H 'Content-Type: application/json' \
-d '{}'
Erwarte HTTP/1.1 400 und etwas wie:
{"success":false,"error":"Failed to parse request body","details":"Unexpected end of JSON input"}
Innerhalb der Container prüfen, welche Adresse auf Port 6274 lauscht:
# verwundbar
docker exec -it inspector_vuln_142 sh -lc "apk add --no-cache iproute2 >/dev/null 2>&1; ss -lnt | grep 6274"
# gepatcht
docker exec -it inspector_patched_143 sh -lc "apk add --no-cache iproute2 >/dev/null 2>&1; ss -lnt | grep 6274"
Erwartetes Ergebnis:
0.0.0.0:6274127.0.0.1:6274
Obwohl wir 127.0.0.1:6275 -> Container:6274 mappen, lauscht der gepatchte Container nur auf seiner eigenen Loopback-Schnittstelle. Vom Host aus solltest du also eine Verbindungsschließung / leere Antwort sehen.
curl -v http://127.0.0.1:6275/
Erwartet: nicht erreichbar (das ist die wirksame Abschwächung).
Um zu beweisen, dass die gepatchte UI weiterhin funktioniert, curl von innerhalb des Containers:
docker exec -it inspector_patched_143 sh -lc "apk add --no-cache curl >/dev/null 2>&1; curl -i http://127.0.0.1:6274/"
Erwartet: HTTP/1.1 200.


Während lokaler Tests am verwundbaren Container habe ich strace an den Inspector-Serverprozess angehängt und beobachtet, wie er einen Kindprozess erzeugt und execve() aufruft.
Ich füge hier bewusst kein einsatzbereites Exploit-Payload ein.
Was zu erfassen ist:
execve("/bin/sh", ["sh","-c", "..."], ...) = 0
execve("/usr/bin/...", [...], ...) = 0
der Kindprozess, der normal beendet wird (Status 0)

Dieses Repository dient der defensiven Forschung, Bildung und reproduzierbaren Verifikation in einer kontrollierten Umgebung. Verwende es nicht gegen Systeme, die dir nicht gehören oder für die du keine Testgenehmigung hast.