
run-code MCP 도구를 통한 인증 없는 원격 코드 실행CVE-2026-5029에 대한 개념 증명(PoC) 익스플로잇 — 서버가
--transport http로 실행될 때run-codeMCP 도구를 통해 트리거되는 Code Runner MCP Server의 치명적인 인증 없는 원격 코드 실행(RCE) 취약점입니다.
| 속성 | 세부 정보 |
|---|---|
| CVE ID | CVE-2026-5029 |
| CVSS 점수 | 8.7 / 10 — 높음 |
| CWE | CWE-306 — 중요 기능에 대한 인증 누락 |
| 영향받는 제품 | Code Runner MCP Server |
| 영향받는 버전 | (패치되지 않음) --transport http를 통해 run-code 도구를 노출하는 모든 버전 |
| 인증 | 필요 없음 (인증 없음) |
| 패치 상태 | 수정되지 않음 |
| 발견자 | Phantom Hat |
Code Runner MCP Server는 --transport http 플래그로 실행될 때 포트 3088에서 JSON-RPC /mcp 엔드포인트를 노출합니다. 이 엔드포인트는 인증 없이 접근할 수 있습니다 — API 키, 세션 토큰, 출처(origin) 검사가 전혀 없습니다.
포트에 접근할 수 있는 인증되지 않은 원격 공격자는 run-code MCP 도구를 직접 호출할 수 있습니다. 이 도구는 임의의 소스 코드와 언어 식별자를 입력받아 임시 파일에 쓴 다음, 해당 인터프리터(bash, python, powershell 등 30개 이상)를 사용하여 child_process.exec()로 실행합니다.
code 매개변수에는 어떤 단계에서도 검증(샌니타이제이션)이 적용되지 않으므로, MCP 서버를 실행 중인 프로세스의 권한으로 완전한 인증 없는 원격 코드 실행이 발생합니다.
┌──────────┐ JSON-RPC tools/call ┌───────────────────────┐ exec() ┌──────────┐
│ Attacker │ ──── run-code tool ─────▶│ /mcp (port 3088) │ ─────────▶ │ RCE │
│ │ (no auth needed) │ Code Runner MCP │ │ on Host │
└──────────┘ └───────────────────────┘ └──────────┘
/mcp 엔드포인트에 연결하여 사용 가능한 MCP 도구 열거run-code 도구의 입력 스키마(code, languageId) 확인code가 포함된 조작된 tools/call JSON-RPC 요청 전송code를 임시 파일에 작성하고 선택한 인터프리터를 통해 실행.
├── exploit.py # 🎯 Interactive RCE exploit shell (Rich-based terminal UI)
└── README.md # 📖 You are here
exploit.py — 대화형 익스플로잇보안 평가 및 사례 연구에서 전문적으로 사용하도록 제작된 주요 익스플로잇 스크립트입니다. 대상 MCP 서버에 연결하여 대화형 셸로 전환되며, 취약한 run-code 도구를 통해 모든 명령이 실시간으로 실행됩니다.
기능은 다음과 같습니다:
-l을 통한 실행 언어 선택(기본값: shellscript)pip 패키지 관리자# Clone the repository
git clone https://github.com/0x00phantom-hat/CVE-2026-5029-Exploit.git
cd CVE-2026-5029-RCE-Exploit
# Install dependencies
pip install fastmcp rich
# Drop into an interactive RCE shell (default: shellscript)
python3 exploit.py -u http://TARGET:3088/mcp
# Use a specific language interpreter
python3 exploit.py -u http://TARGET:3088/mcp -l python
# List all languages the MCP server advertises support for
python3 exploit.py -u http://TARGET:3088/mcp --available
# Probe which language runtimes are actually installed on the target
python3 exploit.py -u http://TARGET:3088/mcp --installed -v
# Show the help menu
python3 exploit.py -h
연결되면 익스플로잇이 대화형 프롬프트로 전환됩니다:
PhantomHat-MCP@Exploit-CVE-2026-5029 $ id
exit를 입력하면 세션이 종료됩니다.
--transport http를 실행하지 마십시오 — 기본 stdio 전송 방식을 사용하세요127.0.0.1에 바인딩하고 인증된 리버스 프록시 또는 VPN 뒤에 배치하세요run-code 호출과 비정상적인 자식 프로세스를 모니터링하세요이 도구는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다.
컴퓨터 시스템에 대한 무단 접근은 미국 컴퓨터 사기 및 남용법(CFAA), 영국 컴퓨터 남용법(Computer Misuse Act) 및 전 세계의 유사 법률에 따라 불법입니다. 작성자는 이 소프트웨어의 오용에 대해 어떠한 책임도 지지 않습니다.
이 도구는 귀하가 소유하거나 테스트에 대한 명시적인 서면 승인을 받은 시스템에만 사용하십시오.
저자: Phantom Hat
승인된 침투 테스트 및 보안 연구 전용입니다.
| 플래그 | 설명 | 기본값 |
|---|
-u, --url | (필수) MCP 서버 URL | — |
-l, --language | 코드 실행에 사용할 언어 | shellscript |
-a, --available | 지원되는 모든 언어 나열 | 플래그 |
-i, --installed | 대상에 설치된 언어 런타임 탐지 | 플래그 |
-v, --verbose | 상세 출력 모드 | 플래그 |
-h, --help | 도움말 메뉴 표시 | — |
| 단계 | 이름 | 설명 |
|---|
| 1 | 🔍 열거 | /mcp에 연결하고 사용 가능한 MCP 도구 열거 |
| 2 | 🧪 스키마 발견 | run-code의 입력 스키마(code, languageId) 확인 |
| 3 | 💣 익스플로잇 전달 | 공격자가 제어하는 코드가 포함된 조작된 tools/call 요청 전송 |
| 4 | 🚀 대화형 실행 | 실시간 셸로 전환 — 모든 명령이 대상 호스트에서 실행됨 |