MCP 도구 포이즈닝: 도구 설명에 숨겨진 지시
Invariant Labs는 MCP 서버가 모델이 읽는 도구 설명에 지시를 숨길 수 있음을 보이고, 도구 섀도잉과 러그 풀 변형 공격을 설명했습니다.
무슨 일이 있었나
2025년 4월 1일, Invariant Labs는 Model Context Protocol의 도구 포이즈닝에 관한 보안 공지를 발표했습니다. 악성 MCP 서버는 도구 설명 안에 지시를 넣습니다. 사용자는 이 텍스트를 거의 보지 못하지만, 모델은 이를 컨텍스트의 일부로 읽고 지시에 따라 동작할 수 있습니다.
같은 공지에서는 관련 공격 두 가지도 설명했습니다. 도구 섀도잉에서는 한 서버의 설명이 에이전트가 다른 신뢰할 수 있는 서버의 도구를 사용하는 방식을 바꿉니다. 러그 풀 공격에서는 사용자가 서버를 승인한 뒤 서버가 도구 설명을 변경합니다.
공격이 성공한 이유
클라이언트는 연결된 모든 서버의 도구 설명을 하나의 컨텍스트에 불러오므로, 모델은 공급업체 문서와 공격자의 지시를 구분할 수 없습니다. 클라이언트가 서버를 한 번만 승인하고 이후에는 확인하지 않으면, 나중에 변경된 내용이 감지되지 않습니다.
대응 방법
- MCP 서버에 연결하기 전에 도구 이름만 보지 말고 전체 도구 설명을 확인하세요.
- 서버 버전을 고정하고 도구 설명의 해시를 저장하세요. 해시가 바뀌면 다시 확인하도록 요청하거나 알림을 보내세요.
- 작업에 필요한 서버만 연결하세요. 그래야 한 서버의 텍스트가 다른 서버의 도구 사용을 유도하지 못합니다.
- 데이터를 전송하거나 파일을 수정하는 도구 호출은 승인 절차를 거치게 하세요.
스킬, 플러그인, MCP 서버 검증중요한 작업에는 승인 요구