
このリポジトリは、CVE-2026-23744 に対する MCPJam Inspector の脆弱なビルドとパッチ適用済みビルドを比較するための小さな Docker ラボです。
学習目的と公開セキュリティポートフォリオの構築を目的としています。セットアップが簡単で、明確な証拠とスクリーンショットを提供します。
⚠️ 倫理 / 適用範囲: 所有しているシステム、または明示的なテスト許可があるシステムでのみテストしてください。このリポジトリはローカルでの再現と文書化を目的としています。
/api/mcp/connect)は存在し、脆弱なセットアップでは認証チャレンジなしで応答します。これはベンダーアドバイザリ / 公開レポートと一致します:
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── patched/
│ └── Dockerfile
└── docs/
└── (スクリーンショットはここに配置)
両方のコンテナをビルドして実行:
docker compose up -d --build
起動を確認:
docker compose ps
期待される結果:
inspector_vuln_142 が 127.0.0.1:6274 で公開inspector_patched_143 が 127.0.0.1:6275 で公開(ただし、ホストからは到達できないはず)
エンドポイントは存在し、必須フィールドが欠落している場合に検証エラーで応答します:
curl -i -X POST http://127.0.0.1:6274/api/mcp/connect \
-H 'Content-Type: application/json' \
-d '{}'
HTTP/1.1 400 と以下のような応答が期待されます:
{"success":false,"error":"Failed to parse request body","details":"Unexpected end of JSON input"}
コンテナ内で、ポート 6274 で待ち受けているアドレスを確認します:
# 脆弱
docker exec -it inspector_vuln_142 sh -lc "apk add --no-cache iproute2 >/dev/null 2>&1; ss -lnt | grep 6274"
# パッチ適用済み
docker exec -it inspector_patched_143 sh -lc "apk add --no-cache iproute2 >/dev/null 2>&1; ss -lnt | grep 6274"
期待される結果:
0.0.0.0:6274127.0.0.1:6274
127.0.0.1:6275 -> container:6274 をマッピングしても、パッチ適用済みコンテナは自身のループバックインターフェースのみで待ち受けるため、ホストからは接続が閉じられる / 空の応答が返ります。
curl -v http://127.0.0.1:6275/
期待される結果: 到達不可(これが緩和策が機能している証拠です)。
パッチ適用済み UI がまだ機能することを証明するには、コンテナ内から curl を実行します:
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/"
期待される結果: HTTP/1.1 200。


脆弱なコンテナでのローカルテスト中に、Inspector サーバープロセスに strace をアタッチし、子プロセスを生成して execve() を呼び出すのを観察しました。
ここでは、すぐに実行可能なエクスプロイトペイロードは意図的に含めていません。
キャプチャする内容:
execve("/bin/sh", ["sh","-c", "..."], ...) = 0
execve("/usr/bin/...", [...], ...) = 0
子プロセスが正常に終了する(ステータス 0)

このリポジトリは、防御的な研究、教育、および管理された環境での再現可能な検証を目的としています。 所有していないシステム、またはテスト許可がないシステムに対して使用しないでください。