
# Docker lab pour comparer les builds vulnérables et corrigés de MCPJam Inspector pour CVE-2026-23744, démontrant les différences de liaison réseau et l'exposition de l'API à des fins de recherche en sécurité éducative.
Ce dépôt est un petit laboratoire Docker pour comparer une version vulnérable vs une version corrigée de MCPJam Inspector pour CVE-2026-23744.
Il est destiné à l'apprentissage et à la constitution d'un portfolio de sécurité public : configuration rapide, preuves claires et captures d'écran.
⚠️ Éthique / périmètre : Testez uniquement sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite. Ce dépôt est destiné à la reproduction locale et à la documentation.
/api/mcp/connect) existe et répond sans défi d'authentification dans la configuration vulnérable.Cela correspond à l'avis du fournisseur / aux rapports publics :
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── patched/
│ └── Dockerfile
└── docs/
└── (les captures d'écran vont ici)
Construisez et lancez les deux conteneurs :
docker compose up -d --build
Vérifiez qu'ils sont actifs :
docker compose ps
Résultat attendu :
inspector_vuln_142 publié sur 127.0.0.1:6274inspector_patched_143 publié sur 127.0.0.1:6275 (mais il ne devrait pas être accessible depuis l'hôte)
Le point de terminaison est présent et répond avec une erreur de validation lorsque les champs requis sont manquants :
curl -i -X POST http://127.0.0.1:6274/api/mcp/connect \
-H 'Content-Type: application/json' \
-d '{}'
Attendez-vous à HTTP/1.1 400 et quelque chose comme :
{"success":false,"error":"Failed to parse request body","details":"Unexpected end of JSON input"}
À l'intérieur des conteneurs, vérifiez quelle adresse écoute sur le port 6274 :
# vulnérable
docker exec -it inspector_vuln_142 sh -lc "apk add --no-cache iproute2 >/dev/null 2>&1; ss -lnt | grep 6274"
# corrigé
docker exec -it inspector_patched_143 sh -lc "apk add --no-cache iproute2 >/dev/null 2>&1; ss -lnt | grep 6274"
Résultat attendu :
0.0.0.0:6274127.0.0.1:6274
Même si nous mappons 127.0.0.1:6275 -> conteneur:6274, le conteneur corrigé écoute uniquement sur sa propre interface de boucle locale. Ainsi, depuis l'hôte, vous devriez voir une fermeture de connexion / une réponse vide.
curl -v http://127.0.0.1:6275/
Attendu : non accessible (c'est l'atténuation qui fonctionne).
Pour prouver que l'interface corrigée fonctionne toujours, utilisez curl depuis l'intérieur du conteneur :
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/"
Attendu : HTTP/1.1 200.


Lors des tests locaux sur le conteneur vulnérable, j'ai attaché strace au processus serveur Inspector et observé qu'il générait un processus enfant et appelait execve().
Je n'inclus volontairement pas de payload d'exploitation prêt à l'emploi ici.
Ce qu'il faut capturer :
execve("/bin/sh", ["sh","-c", "..."], ...) = 0
execve("/usr/bin/...", [...], ...) = 0
le processus enfant se terminant normalement (statut 0)

Ce dépôt est destiné à la recherche défensive, à l'éducation et à la vérification reproductible dans un environnement contrôlé. Ne l'utilisez pas contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation de tester.