24개의 오픈 소스 MCP(Model-Control-Protocol) 서버 프로젝트를 스캔한 한 보안 연구원이 CVSS 점수 9.8에 달하는 심각한 샌드박스 커맨드 인젝션 취약점을 발견했습니다. 이 버그는 미드티어 AI 에이전트 프레임워크인 AgenticX에 존재하며, 공격자가 서버를 실행하는 Docker 컨테이너에 임의의 셸 명령을 주입할 수 있게 합니다.

MCP 서버가 중요한 이유

MCP는 자율 AI 에이전트가 파일, 데이터베이스, 브라우저 등 외부 도구와 통신할 수 있게 해주는 연결 고리입니다. 개발자는 언어 모델이 실제 세계의 리소스를 읽고, 쓰고, 조작할 수 있는 능력을 부여하기 위해 애플리케이션에 MCP 서버를 내장합니다. 프로토콜 자체는 가볍고 널리 채택되었지만, 주변 코드를 보안 처리하는 것은 각 프로젝트의 유지 관리자에게 달려 있습니다.

Cline이나 Aider와 같은 대규모 MCP 구현체는 이미 정기적인 감사를 받고 있으며 성숙한 보안 프로세스를 갖추고 있습니다. 여기서 조사된 24개의 프로젝트는 GitHub에서 별(star) 개수가 100개에서 1,000개 사이인 "미드티어" 범위에 속합니다. 이러한 저장소는 종종 보안이 강화된 코드보다 빠른 기능 제공을 우선시하므로, 모든 오픈 소스 MCP 서버가 기본적으로 안전하다고 가정하는 사용자들에게 사각지대를 만듭니다.

스캔 과정

연구원은 다음과 같은 다섯 가지 고전적인 웹 앱 공격 패턴을 찾는 스캐너를 제작했습니다:

  • 커맨드 인젝션 (Command injection)
  • 경로 탐색 (Path traversal)
  • 서버 측 요청 위조 (SSRF)
  • SQL 인젝션 (SQL injection)
  • 샌드박스 탈출 (Sandbox escape)

5,911개의 소스 파일을 대상으로 스캐너를 실행한 결과, 초기 경고가 94건 발생했습니다. 수동 분류(triage) 과정을 거친 후, 단 하나의 경고만이 실제 취약점으로 확인되었습니다.

AgenticX 버그 분석

AgenticX는 사용자가 제공한 문자열을 Python f-string에 삽입하여 셸 명령을 생성한 다음, 그 결과를 컨테이너의 셸로 직접 전달합니다. 파일 경로에 대한 검증이나 인용(quoting) 처리가 이루어지지 않습니다. 따라서 적대적 프롬프트를 통해 세미콜론(;)이나 기타 셸 메타 문자를 주입함으로써, 공격자가 원하는 어떤 명령이든 컨테이너에서 실행되도록 만들 수 있습니다.

연구원은 다음과 같은 방법으로 코드를 패치했습니다:

  1. shlex.quote()를 사용하여 언어 모델이 제공하는 모든 경로를 안전하게 이스케이프(escape) 처리했습니다.
  2. 명령을 구성하기 전에 경로 탐색 패턴(../)에 대한 명시적인 확인 절차를 추가했습니다.

패치 후 스캐너를 다시 실행한 결과 위험 수준이 급격히 낮아졌으며, 이는 해당 조치가 근본 원인을 해결했음을 확인시켜 주었습니다.

누가 이득을 보고, 누가 손해를 보는가

  • AI 개발자: MCP 서버를 제품에 내장하는 개발자들은 이제 단 하나의 검증(sanitization) 단계 누락이 전체 보안 체인을 어떻게 무너뜨릴 수 있는지에 대한 구체적인 사례를 얻게 되었습니다. 외부 API 페이로드를 다룰 때와 마찬가지로, 언어 모델에서 생성되는 모든 파라미터를 신뢰할 수 없는 입력값으로 취급하십시오.

다른 관점

연구원은 MCP 프로토콜 자체는 여전히 건전하다는 점을 강조합니다. 이 결함은 와이어 포맷(wire format)의 설계 결함이 아니라 특정 구현에서의 코딩 실수입니다. 규모가 크고 감사를 잘 받은 프로젝트들은 이미 유사한 문제를 해결했으며, 오픈 소스 커뮤니티는 AgenticX 패치로부터 배울 수 있습니다. 그럼에도 불구하고, 이번 사건은 "미드티어" 프로젝트가 별 개수가 적더라도 영향력이 큰 버그를 품고 있을 수 있음을 보여줍니다.

시사점

AgenticX의 검증되지 않은 단 하나의 f-string이 전체 MCP 서버를 임의 코드 실행을 위한 발판으로 만들었습니다. 이번 사례는 AI 에이전트 생태계의 보안이 프로토콜보다는 규율 있는 구현에 달려 있음을 증명합니다. 개발자는 LLM이 생성한 모든 파라미터를 적대적인 것으로 간주해야 하며, 플랫폼은 런타임 보호 조치를 강제해야 하고, 보안 도구는 AI 에이전트가 생성하는 고유한 신뢰 체인을 이해할 수 있도록 진화해야 합니다.

Source: dev.to/easterndev/i-scanned-24-mcp-server-projects-and-found-a-real-sandbox-command-injection-cvss-98-4k9h