MCP 명령어 주입 취약점(CVE)에 대해 보안 스캐너 테스트하기
요약
본 글은 LLM과 MCP 서버 통신 코드를 위한 오픈 소스 정적 스캐너 SecureAI-Scan의 테스트 과정을 공유합니다. 특히 모델이 작성하는 도구 인자(argument)를 이용한 명령어 주입 취약점(CVE)을 중점적으로 다룹니다. 25개 인기 MCP 서버 및 프레임워크를 스캔하며, 기존 규칙의 오탐지 문제와 새로운 탐지 기준을 제시합니다.
핵심 포인트
- LLM과 MCP 통신 코드에 대한 정적 분석 도구(SecureAI-Scan)가 소개됨.
- 모델이 작성하는 인자를 이용한 명령어 주입 취약점(CVE) 테스트를 수행함.
- 기존 규칙의 오탐지(false positives) 문제를 발견하고 수정하여 정확도를 높임.
- 새로운 탐지 규칙은 기본 설정에서 0개의 결과를 보여, 높은 신뢰성을 확보함.
저는 LLM과 MCP 서버와 통신하는 코드를 위한 오픈 소스 정적 스캐너인 SecureAI-Scan을 유지 관리하고 있습니다. 이 게시물은 제가 이를 어떻게 테스트했는지, 그리고 어떤 부분에서 실패했는지를 포함하여 설명합니다.
문제점. MCP 서버는 도구(tool)를 노출하며, 이 도구의 인자(argument)는 모델이 작성합니다. 모델은 컨텍스트에 지시하는 모든 텍스트—GitHub 이슈, 웹페이지, 요약하도록 요청받은 파일 등—를 작성할 수 있습니다. 만약 어떤 도구가 exec(git log ${branch})를 실행한다면,
더 어려운 테스트: 늑대 소리를 지르는가? CVE를 찾아내지만 서브프로세스를 실행하는 모든 서버에서 경고를 울리는 규칙은 쓸모가 없습니다. 저는 25개의 인기 있는 MCP 서버 및 프레임워크(공식 SDK, 레퍼런스 서버, Playwright, Sentry, MongoDB, Supabase, Firecrawl, FastMCP, DesktopCommander 등)를 스캔했습니다.
- 새로운 규칙은 기본 설정에서 0개의 탐지 결과를 일으켰습니다.
- 임의의 명령을 실행하도록 설계된 도구들은
--paranoid모드에서만 나타나며, 이는 설계상(by-design)으로 표시됩니다.
이 스윕 과정에서는 제가 이전에 작성한 규칙들에서도 **오탐지(false positives)**를 발견했으며, 이 모든 것은 테스트 고정값(test fixtures)으로 수정되어 잠겨 있습니다:
- 샘플 설정에서 자신의 주소를 출력하는 서버가
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기