Insecure MCP Demo

by kenhuangus
Verified

안전하지 않은 MCP 데모

개요

이 프로젝트는 취약한 MCP 서버와 여러 클라이언트(개념 증명 공격 클라이언트와 우수한 클라이언트 포함)를 시연합니다. MCP 서버의 잠재적 보안 취약점을 보여주기 위한 교육 목적으로 설계되었습니다.

프로젝트 구조

  • vuln-mcp.py : 안전하지 않은 도구를 노출시키는 취약한 MCP 서버입니다.
  • good-mcp-client.py : 일반적인 상호작용(레코드 삽입/쿼리)에 적합한 우수한 클라이언트입니다.
  • attack-mcp-client.py : 서버 취약점을 악용하는 방법을 보여주는 자동화된 공격 클라이언트입니다.
  • requirements.txt : 프로젝트에 대한 Python 종속성입니다.

특징 및 취약점

노출된 서버 도구

  1. 삽입_레코드
    • 이름/주소 레코드를 데이터베이스에 삽입합니다.
    • 취약점: 사용자 입력을 SQL 쿼리에 직접 문자열로 삽입하여 SQL 주입에 취약합니다.
  2. 쿼리_레코드
    • 데이터베이스의 모든 레코드를 나열합니다.
    • 취약점: 인증이나 액세스 제어 없이 모든 데이터가 노출됩니다.
  3. 실행_sql
    • 클라이언트가 제공한 임의의 SQL 쿼리를 실행합니다.
    • 취약점: 파괴적인 명령(예: 데이터 유출, 스키마 변경)을 포함한 모든 SQL 명령을 허용합니다.
  4. get_env_variable
    • 요청된 모든 환경 변수의 값을 반환합니다.
    • 취약점: 민감한 환경 변수(예: 비밀, API 키)가 유출됩니다.

달리는 방법

1. 종속성 설치

지엑스피1

2. 서버와 Good Client를 시작합니다.

한 터미널에서:

python good-mcp-client.py vuln-mcp.py

프롬프트에 따라 대화형으로 레코드를 삽입/쿼리합니다.

3. 공격 클라이언트 실행

다른 터미널에서는:

python attack-mcp-client.py vuln-mcp.py

이렇게 하면 자동으로 다음이 수행됩니다.

  • SQL 주입 공격 시도
  • 임의의 SQL 쿼리 실행
  • 여러 가지 일반적인 환경 변수를 읽으려고 시도합니다.

출력 예

  • 공격 클라이언트는 어떤 페이로드가 성공하고 실패하는지 보여주고, 접근 가능한 경우 데이터베이스 내용과 환경 변수 값을 출력합니다.

입증된 취약점

  • SQL 주입: 사용자 입력이 검증되지 않아 공격자가 SQL 논리를 조작하고 임의의 데이터를 삽입할 수 있습니다.
  • 임의 코드 실행: execute_sql 도구를 사용하면 공격자가 모든 SQL 명령을 실행할 수 있으며, 여기에는 데이터 도난이나 파괴도 포함됩니다.
  • 민감한 데이터 노출: get_env_variable 도구를 사용하면 공격자가 비밀과 구성 값을 읽을 수 있습니다.
  • 접근 제어 부족: 누구나 인증 없이 모든 도구를 실행하고 모든 데이터에 접근할 수 있습니다.

완화 전략

실제 MCP 서버를 보호하려면 다음을 수행해야 합니다.

  1. 매개변수화된 쿼리 사용:
    • SQL 쿼리에 문자열 보간 대신 매개변수 대체를 항상 사용하면 삽입을 방지할 수 있습니다.
    • 예(보안):
      cursor.execute("INSERT INTO records (name, address) VALUES (?, ?)", (name, address))
  2. 위험한 도구 제한:
    • execute_sqlget_env_variable 과 같은 도구를 제거하거나 엄격하게 제한합니다.
    • 필요한 기능만 공개합니다.
  3. 인증 및 권한 부여 구현:
    • 민감한 도구나 데이터에 대한 액세스를 허용하기 전에 사용자에게 인증과 권한 확인을 요구합니다.
  4. 입력 검증 및 정리:
    • 모든 사용자 입력, 특히 데이터베이스나 시스템과 상호 작용하는 입력을 확인하고 정리합니다.
  5. 환경 변수 액세스 제한:
    • 민감하지 않은 변수에만 액세스를 허용하거나 이 도구를 완전히 제거하세요.
  6. 감사 및 모니터링 사용:
    • 모든 도구 호출을 기록하고 의심스럽거나 부적절한 행동을 모니터링합니다.
  7. 최소 권한의 원칙:
    • 최소한의 권한으로 서버를 실행하고 데이터베이스와 OS 액세스를 최대한 제한합니다.

부인 성명

이 프로젝트는 교육 및 데모 목적으로만 사용됩니다. 이 코드를 프로덕션 환경에 배포하지 마십시오.


질문이나 추가 개선 사항이 있으시면 이슈를 등록하거나 프로젝트 관리자에게 문의하세요.

-
security - not tested
F
license - not found
-
quality - not tested

교육 목적으로 클라이언트가 데이터베이스와 상호 작용할 수 있도록 의도적으로 취약한 MCP 서버로, SQL 주입, 임의 코드 실행, 중요 데이터 노출 등의 보안 취약성을 보여줍니다.

  1. Overview
    1. Project Structure
      1. Features & Vulnerabilities
        1. Exposed Server Tools
      2. How to Run
        1. 1. Install Dependencies
        2. 2. Start the Server and Good Client
        3. 3. Run the Attack Client
      3. Example Output
        1. Vulnerabilities Demonstrated
          1. Mitigation Strategies
            1. Disclaimer
              ID: fib5wotluq