nmap-mcp 허용 목록 검증 결함 CVE-2026-117570 분석

Vorota-ai nmap-mcp에서 발생한 CVE-2026-117570 취약점은 실행 범주를 제한하는 허용 목록(allowlist) 검증이 부적절하게 구현되는 바람에, 공격자가 차단된 NSE(Nmap Scripting Engine) 스크립트 범주를 강제로 실행할 수 있게 된 기술적 결함입니다. 그 결과 MCP 클라이언트나 프롬프트 인젝션에 노출된 에이전트를 거쳐 보안상 위험한 스크립트가 실행될 여지가 열립니다.

CVE-2026-117570 취약점 개요 및 영향 범위

이 취약점은 오픈소스 MCP 서버 프로젝트인 Vorota-ai nmap-mcp에서 발견되었습니다. 취약점 식별 번호는 CVE-2026-117570이고, CNA(CVE Numbering Authority)는 VulnCheck로 기록되어 있습니다.

결함의 핵심은 입력 검증이 부적절해 시스템이 의도하지 않은 동작을 허용한다는 데 있습니다. 영향 범위와 대상 컴포넌트를 정리하면 다음과 같습니다.

  1. 영향 버전: 커밋 3636afa까지의 모든 버전
  2. 영향 컴포넌트: nmap_mcp/server.py 파일 내의 scan_vulnerabilities() 함수
  3. 취약 코드 위치: 해당 함수의 440-446라인

기술적 분석: NSE 스크립트 허용 목록 우회 경로

CVE-2026-117570은 입력 검증과 정보 누락이 겹친 전형적인 보안 결함으로 분류됩니다. 보고된 CWE(Common Weakness Enumeration) 유형은 두 가지입니다.

  • CWE-183: 정보 누락에 의한 잘못된 입력 허용 목록 (Incorrectly Configured Allowlist)
  • CWE-20: 부적절한 입력 검증 (Improper Input Validation)

nmap-mcp 서버는 보안을 위해 특정 NSE 스크립트 범주만 허용하도록 설계됐지만, scan_vulnerabilities() 함수의 검증 로직이 미흡해 호출자가 허용 목록에 없는 범주를 전달해도 이를 막지 못하고 그대로 실행해 버립니다.

특히 MCP 클라이언트나 LLM 에이전트가 프롬프트 인젝션 공격에 노출되면, 공격자는 이 우회 경로로 exploit, dos, brute처럼 시스템에 치명적인 위험 범주의 스크립트를 실행하도록 유도합니다.

심각도 평가 및 공격 벡터 분석

이 취약점의 심각도 평가는 공식 레코드와 제보 연구자가 크게 갈립니다. 실제 운용 환경에서의 위험성은 수치보다 높을 가능성이 큽니다.

평가 주체 CVSS 버전 심각도 점수 비고
CVE 레코드 (공식) CVSS 4.0 / 3.1 4.8 / 5.2 중간 수준의 위험도로 평가
제보 연구자 (GitHub Issue #3) CVSS 3.1 8.1 (High) 높은 심각도로 평가

연구자가 제시한 CVSS 3.1 벡터는 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N입니다. 벡터를 풀면 공격의 전제 조건과 환경이 세 가지로 드러납니다.

  1. 네트워크 도달 가능성 (AV:N): MCP 서버가 네트워크로 접근 가능한 환경이어야 합니다.
  2. 공격 권한 및 경로 (PR:L): MCP 도구를 호출할 기본 자격을 갖췄거나, LLM 에이전트를 조작할 프롬프트 인젝션 지점이 존재해야 합니다.
  3. 영향도 (C:H, I:H): 성공적인 공격 시 기밀성(Confidentiality)과 무결성(Integrity) 모두 높은 영향(High)을 받습니다.

대응 방안 및 점검 체크리스트

인프라 엔지니어와 소프트웨어 개발자라면 MCP 서버 경계로 들어오는 입력 값의 무결성을 다시 점검할 일입니다. 특히 LLM 에이전트가 외부 입력(사용자 프롬프트)으로 서버의 도구를 호출하는 구조라면 서버 측의 검증 로직이 최후의 보루입니다.

1. 버전 및 코드 점검

  • 운용 중인 nmap-mcp 버전이 커밋 3636afa 이전인지 먼저 확인합니다.
  • nmap_mcp/server.py 내 scan_vulnerabilities() 함수의 440-446라인 검증 로직이 적절히 구현돼 있는지 따져봅니다.

2. 입력 값 검증 강화

  • 허용 목록(Allowlist) 기반의 검증 시, 단순히 값이 포함되어 있는지를 넘어 입력 값의 정확한 일치 여부까지 검증하는 로직을 적용합니다.
  • exploit, dos, brute 등 위험 범주의 스크립트가 입력 값으로 전달되면 즉시 차단하고 로그를 남기는 장치를 마련합니다.

3. 아키텍처 보안 강화

  • MCP 서버를 네트워크에 직접 노출하는 대신, 신뢰할 수 있는 내부망에서만 접근 가능하도록 망 분리를 검토합니다.
  • 프롬프트 인젝션으로 인한 도구 오용을 막으려면 에이전트 단계에서 입력 값 필터링을 강화하고, 서버 단계에서 한 번 더 검증하는 다중 방어 체계를 갖추는 편이 안전합니다.

댓글 남기기