
nmap MCP 서버의 OS 명령어 주입에 대한 권고 및 무해한 PoC, 중복 CVE 추적, 탐지 지침, 완화 조치를 포함합니다.
run_nmap_scan을 통한 OS 명령어 주입run_nmap_scan MCP 도구는 target 및 additionalFlags 매개변수를 문자열 보간으로 명령어를 구성한 뒤 child_process.exec, 즉 /bin/sh -c를 통해 실행합니다.
⚠ 먼저 읽어 주세요 — 중복 식별자
이 취약점은 이 CVE ID가 존재하기 전에 이미 공개되었습니다. 이는 VulDB가 할당하고 2026-03-03에
mcp-nmap-server <= 1.0.1을 대상으로 게시한 CVE-2026-3484 / GHSA-xc68-rrqc-qgq3 에서 다루어졌습니다 — 동일한 패키지, 동일한 CWE-78child_process.exec싱크입니다.CVE-2026-52616은 독립적인 보고에 대응하여 2026-07-13에 MITRE CNA-LR이 s1ko에게 할당한 것입니다. 해당 할당은 중복으로 보이며, 그렇게 표시되었습니다. 인용해야 하는 것은 기존 식별자인 CVE-2026-3484입니다.
이 저장소는 완전성을 위해 그리고 중복 사실을 문서화하기 위해 게시된 것이며, 새로운 발견을 주장하기 위한 것이 아닙니다. 최초 공개 공개에 대한 공로는 s1ko의 것이 아닙니다.
| CVE | CVE-2026-52616 — CVE-2026-3484의 중복 |
| CWE | CWE-78 (OS 명령어에 사용되는 특수 요소의 부적절한 중화) |
| 패키지 | mcp-nmap-server (npm) |
| 영향받는 버전 | 1.0.1 및 이전 — 모든 게시된 버전 |
| 수정된 버전 | 없음 — 저장소 보관됨 |
| CVSS v3.1 | AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 8.4 High (stdio 전송). 서버가 네트워크 전송으로 래핑된 경우 AV:N → 9.8 Critical. |
| 독립 보고자 | s1ko (github.com/s1ko, [email protected]) |
| CVE 할당일 | 2026-07-13, MITRE CNA-LR |
이 중복을 정리하려는 사람이라면 주목할 만한 명명 함정이 있습니다: npm 패키지는 mcp-nmap-server이고 저장소는 nmap-mcp-server입니다. 두 가지 순서는 동일한 프로젝트를 가리킵니다.
MCP 도구 인수는 공격자의 영향을 받습니다. 이들은 에이전트가 처리하는 콘텐츠 — 문서, 웹 페이지, 도구 출력 — 으로부터 LLM이 생성하므로, 간접 프롬프트 주입은 도구 핸들러가 받는 값에 대한 통제권을 공격자에게 부여합니다. 그러한 값 중 하나라도 셸로 전달하는 핸들러는 그 영향력을 MCP 서버를 실행하는 호스트에서의 코드 실행으로 바꿉니다. 이는 선례 사례인 aws-mcp-server / CVE-2026-5058과 동일한 모델입니다.
dist/index.js — 대상이 명령어 문자열에 추가된 뒤 exec에 전달됩니다:
command += ` ${target}`;
…
const { stdout, stderr } = await promisify(exec)(command);
child_process.exec는 인자를 /bin/sh -c에서 실행하므로, 호출자가 제공한 모든 내용이 셸 구문이 됩니다. Zod 입력 스키마는 z.string()을 선언하는데, 이는 타입만 검증할 뿐 내용에 대해서는 아무것도 말하지 않으므로 메타문자가 그대로 통과합니다. additionalFlags도 같은 경로를 통해 동일한 문자열에 도달합니다.
target이 127.0.0.1; touch /tmp/marker; echo INJECTED로 설정된 run_nmap_scan 호출은 다음을 생성합니다:
/bin/sh -c "nmap … 127.0.0.1; touch /tmp/marker; echo INJECTED"
poc/driver.mjs는 stdio를 통해 MCP와 통신합니다. 서버를 초기화하고, 주입된 target과 함께 run_nmap_scan에 대해 하나의 tools/call을 실행하며, 마커 파일을 확인합니다. 페이로드는 무해한 touch입니다.
npm pack [email protected]
tar xf mcp-nmap-server-1.0.1.tgz && cd package && npm install
node ../poc/driver.mjs
영향받는 버전에서 예상되는 결과:
==== POC RESULT (mcp-nmap-server) ====
marker /tmp/PWNED_nmap created: true
verdict: CONFIRMED — command injection executed
nmap은 설치되어 있을 필요가 없습니다. 주입된 명령은 선행 바이너리가 해석되는지 여부와 관계없이 동일한 /bin/sh -c 문자열에서 실행됩니다.
2026-06-01에 격리된 컨테이너에서 검증되었고 2026-06-13에 재검증되었습니다.
테스트 권한이 있는 인프라에 대해서만 실행하십시오.
;, &&, ||, |, 백틱 또는 $(를 포함하는 nmap 명령줄.nmap으로 시작하고 구분자 뒤에 두 번째 명령이 포함된 sh -c 프로세스 — 애플리케이션 로깅에 의존하지 않는 프로세스 트리 신호(auditd, eBPF, Falco, EDR).nmap은 예상되지만 셸, 인터프리터 또는 네트워크 클라이언트는 예상되지 않습니다.target 또는 additionalFlags에 셸 메타문자가 포함된 MCP 도구 호출 로그. target은 IP, CIDR 또는 호스트 이름과 일치해야 하며 그 외에는 아무것도 아니어야 합니다.MITRE ATT&CK T1059.004 Command and Scripting Interpreter: Unix Shell.
저장소는 아카이브되어 읽기 전용이며, npm 최신 버전은 영향을 받는 1.0.1이고, 패치된 릴리스는 게시되지 않을 것입니다. 제거가 완화책입니다:
target이 명령 문자열에 도달하기 전에 IP/CIDR/호스트 이름 패턴에 대해 검증하고
additionalFlags를 허용 목록에 추가하도록 서버를 래핑하거나 포크하십시오.포크하는 사람을 위한 수정 사항은 exec용 문자열을 만드는 대신
인자 벡터와 함께 execFile("nmap", [...args])를 호출하는 것입니다.
Zod 타입 검증만이 아니라 콘텐츠 검증이 근본적인 요구 사항입니다.
NIST SP 800-53r5 SI-10; OWASP ASVS v4 §5.3.8; CWE-78 완화 M1 및 M2.
| 날짜 | 사건 |
|---|---|
| 2026-03-03 | CVE-2026-3484 / GHSA-xc68-rrqc-qgq3, VulDB에 의해 게시됨 — 다른 신고자에 의한 최초의 공개 공개 |
| 2026-05-29 | 게시된 tarball의 소스 검토를 통해 독립적으로 식별됨, 3월 권고를 인지하지 못한 상태 |
| 2026-06-01 | 격리된 컨테이너에서 MCP stdio를 통해 동적으로 검증됨 |
| 2026-06-13 | 제출 전 중복 제거 과정에서 중복 확인됨; 저장소가 아카이브되었고 Private Vulnerability Reporting을 사용할 수 없음이 확인됨. 내부 판정: 제출하지 않음 |
| 2026-07-13 | MITRE CNA-LR이 그럼에도 불구하고 CVE-2026-52616을 할당하며, s1ko를 발견자로 인정 |
| 2026-08-22 | 이 글 게시, 중복 사례 문서화 |
aws-mcp-server)동일한 연구 과정에서 나온 동반 권고: CVE-2026-52617, CVE-2026-52618.
MIT — LICENSE 참조.