
# CVE-2026-23744용 MCPJam Inspector의 취약한 빌드와 패치된 빌드를 비교하기 위한 Docker 랩으로, 교육용 보안 연구를 위해 네트워크 바인딩 차이와 API 노출을 시연합니다.
이 저장소는 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)

이 저장소는 방어적 연구, 교육, 통제된 환경에서의 재현 가능한 검증을 위한 것입니다. 소유하지 않았거나 테스트 허가를 받지 않은 시스템에 사용하지 마세요.