MCP 프롬프트 인젝션: 탈취된 에이전트가 할 수 있는 일 제한하기

MCP 프롬프트 인젝션은 아무도 요청하지 않은 도구를 에이전트가 호출하게 만듭니다. 대신 세션을 제한하세요. 도구는 줄이고, 기본은 읽기 전용으로 두고, 쓰기는 확인을 거치게 하세요.

읽는 시간 5분Sume
전체 글

MCP 프롬프트 인젝션은 에이전트가 웹 페이지, 파일, 도구 결과처럼 MCP 연결을 통해 읽는 텍스트로, 모델이 그대로 따르게 되는 지시를 담고 있습니다. 아무도 요청하지 않은 도구를 호출하라는 지시가 한 예입니다. 모델이 알아차릴 것이라고 기대할 수는 없으니, 탈취된 턴이 할 수 있는 일에 한계를 두세요. 작업에 필요한 도구만 노출하고, 쓰기가 꼭 필요한 경우가 아니면 세션을 읽기 전용으로 두고, 읽기 전용이 아닌 도구는 모두 사람이 확인하게 하고, 자격 증명은 모델의 컨텍스트 밖에 두세요.

클라이언트 규칙은 MCP 명세의 도구와 스키마 페이지, 그리고 OpenAI의 ChatGPT 개발자 모드 페이지에서, Sume의 제어 장치는 MCP 빠른 시작, MCP 도구와 게이트, MCP OAuth와 API 키, 안전한 자동화 문서에서 가져왔으며, 모두 2026-09-27에 확인했습니다. API로 Sume 실행에 넘기는 호출자 데이터는 프롬프트 인젝션과 사용자 입력을 참고하세요.

MCP 명세는 클라이언트에게 무엇을 요구하나요?

명세는 도구를 모델 제어(model-controlled) 방식이라고 부릅니다. 모델이 스스로 도구를 찾아 호출할 수 있다는 뜻입니다. 명세는 신뢰와 안전을 위해 도구 호출을 거부할 수 있는 사람이 항상 루프 안에 있어야 한다고 하며, 클라이언트가 해야 할 일을 다음과 같이 나열합니다.

  • 어떤 도구가 모델에 노출되는지 분명히 보여 주고, 도구가 호출되면 이를 표시해야 합니다.
  • 민감한 작업은 사용자에게 확인을 요청해야 합니다.
  • 악의적이거나 실수로 인한 데이터 유출을 막도록, 서버를 호출하기 전에 도구 입력을 보여 줘야 합니다.
  • 도구 결과는 모델에 넘기기 전에 검증해야 합니다.
  • 도구 호출에는 타임아웃을 두고, 감사를 위해 도구 사용을 로그로 남겨야 합니다.

readOnlyHint만으로는 왜 충분하지 않나요?

도구 어노테이션은 힌트입니다. 명세는 어노테이션이 도구를 충실하게 설명한다는 보장이 없고, 클라이언트는 신뢰할 수 없는 서버의 어노테이션을 근거로 도구 사용을 결정해서는 절대 안 된다고 말합니다(각 힌트는 MCP 도구 어노테이션에서 다룹니다). 신뢰하는 서버라면 ChatGPT 같은 클라이언트가 어노테이션을 활용합니다. ChatGPT 개발자 모드는 readOnlyHint를 따르고, 이 힌트가 없는 도구는 쓰기 작업으로 취급하며, 쓰기 작업에는 기본적으로 확인을 요구합니다. OpenAI 페이지는 프롬프트 인젝션, 쓰기 작업에서의 모델 실수, 정보를 훔치려는 악성 MCP 서버를 경고합니다.

현재 Sume 서버는 읽기 도구에 readOnlyHint: true를, 쓰기·유료 도구에 readOnlyHint: false를 표시하므로, ChatGPT 같은 클라이언트는 유료 호출 전에 확인을 요청합니다. 약한 고리는 기억된 승인입니다. ChatGPT는 도구에 대한 승인 선택을 대화가 끝날 때까지 적용할 수 있고, 그 뒤로는 주입된 지시가 확인 없이 도구에 닿습니다. OpenAI는 여러분의 승인 없이 이후의 쓰기 작업을 해도 된다고 믿을 수 있는 애플리케이션에만 그렇게 하라고 합니다.

Sume MCP 설정은 주입된 호출을 어떻게 제한하나요?

Sume 문서는 주입된 텍스트를 탐지하는 방법을 설명하지 않습니다. 대신 아래 표의 제어 장치가 접근과 지출에 한계를 둡니다.

dry_run과 max_spend_usd는 모델이 작성하는 인수입니다. 정상적인 에이전트는 dry_run=true로 비용을 미리 보고 max_spend_usd로 상한을 두지만, 탈취된 턴은 둘 다 빼 버릴 수 있습니다. 실제로 지켜지는 한도는 모델 밖에 있습니다. 세션의 스코프, 클라이언트의 도구 목록, 그리고 유료 호출마다 확인하는 사람입니다. Sume 인증 문서는 에이전트에게 먼저 읽기 전용 명령을 주고, 쓰기나 유료 생성 명령 전에는 명시적 확인을 요구하라고 합니다.

Sume MCP 빠른 시작, MCP 도구와 게이트, MCP OAuth와 API 키 기준, 2026-09-27 확인.
제어 장치설정 위치제한하는 것
OAuth mcp:read동의 페이지. Write는 기본적으로 꺼짐쓰기·유료 도구가 insufficient_scope를 반환
OAuth mcp:write동의 화면에서 Write를 켬변경·유료 도구가 추가됨. mcp:paid 스코프는 없음
API 키Authorization: Bearer 또는 x-api-key전체 호스팅 도구 세트. 범위를 좁히는 것은 클라이언트의 도구 목록
max_spend_usd유료 호출마다 넣는 인수지출 상한. 호출에 포함된 경우에만 강제됨
idempotency_key쓰기·유료 호출에 필수재시도 중복 제거. 사람의 승인이 아님

모델의 컨텍스트에 절대 들어가면 안 되는 것은 무엇인가요?

주입된 지시가 모델에게 되풀이하거나 다른 곳으로 보내라고 요구할 수 있는 모든 것입니다. Sume 문서는 MCP OAuth 토큰은 API 키가 아니라고 설명하고, OAuth 토큰을 CLI 설정에 저장하거나 프롬프트에 붙여 넣거나 서드파티 프로바이더로 전달하지 말고, 서명된 URL, OAuth 토큰, API 키를 채팅 로그에 붙여 넣지 말며, 로그나 채팅 기록에 노출된 API 키는 교체하라고 합니다.

로그에도 같은 규칙이 적용됩니다. Sume 문서가 로그에 남겨도 안전하다고 보는 것과 안전하지 않다고 보는 것은 유료 API를 호출하는 AI 에이전트의 안전한 자동화에 정리되어 있습니다.

출처

관련 글

에이전트 카테고리의 다른 글

에이전트 글 전체 보기

작성자 Sume