구글, 인도네시아 탕그랑시 정부, 프랑스 공공데이터 포털(data.gouv.fr), JP모건체이스는 2026년 6~9월 자사 MCP 서버가 외부에서 받은 주소가 실제로 어디로 향하는지(해석된 IP·리다이렉트)를 제대로 확인하지 않고 요청을 보내던 서버 측 요청 위조(SSRF) 결함을 잇달아 고쳤다.

MCP(Model Context Protocol)는 AI 에이전트가 사내 시스템과 외부 서비스의 기능을 '도구'로 불러 쓰게 하는 연결 규격이다. MCP 보안은 이 도구가 받는 인자와 돌려주는 데이터를 누가 통제하는지 관리하는 일이다.

SSRF는 공격자가 고른 주소로 서버가 대신 요청을 보내게 되는 결함이다. 독립 연구자 Syed Anas Mohiuddin은 2026년 10월 업데이트에서 이 네 곳과 벡터DB 업체 Weaviate까지, 서로 관계없는 다섯 조직이 같은 유형의 SSRF 실수를 각자의 보안팀 확인을 거쳐 고쳤다고 밝혔다. 그가 짚은 원인은 MCP 경계를 넘는 데이터를 '시스템 안쪽에서 왔다'고 믿는 가정이다. 국내에서도 카카오 플레이MCP에 공개 등록된 MCP 서버가 1년 새 약 31배(468개)로 늘었다.

사내 시스템을 MCP로 AI 에이전트에 연결했다면 도구가 가져오는 주소를 연결 시점에 다시 검증하는지, MCP 서버가 뒤에서 호출하는 API(이하 상위 API)의 응답 원문을 로그에 남기지 않는지, 도구 결과를 지시로 믿지 않는지부터 본다.

MCP 보안에서 무엇이 문제인가

에이전트가 MCP 도구에 넘기는 인자에는 URL, 경로, 엔드포인트도 들어간다. 연구자는 MCP 서버의 실패를 두 유형으로 본다. 하나는 에이전트가 넘긴 인자에서, 다른 하나는 상위 API에서 돌아온 데이터에서 생긴다.

  • SSRF: 서버가 받은 값이 실제로 어디로 해석되는지 확인하지 않고 요청을 만들면, 서버가 어디와 통신할지를 에이전트가 정하게 된다. 외부 콘텐츠에 심은 프롬프트 인젝션이 도구 호출에 영향을 주고 서버의 목적지 검증이 이를 막지 못하면, 공격자가 서버의 요청 목적지를 바꿀 수 있다.
  • 상위 API 응답을 그대로 로그에 남기기: 상위 API 응답을 가리지 않고 중앙 로그에 남긴다. 공격이 없어도 평범한 오류만으로 피해가 생긴다.

MCP 공식 보안 모범 사례는 169.254.169.254 같은 클라우드 메타데이터 주소로 가는 요청이 클라우드 자격증명을 빼낼 수 있다고 설명한다. 공식 문서 'Local Server Security'에 따르면 로컬 MCP 서버도 사용자 계정 권한을 그대로 가진 평범한 프로세스라 환경 변수, SSH 키, 클라우드 자격증명을 읽을 수 있고, stdio는 샌드박스가 아니다.

MCP 취약점 사례: MCP 서버 네 곳과 Weaviate에서 같은 유형의 결함이 나왔다

연구자의 집계는 본인 발표지만, 수정 사실은 각 조직이 남긴 공개 기록으로 확인된다.

조직 대상 결함 수정 기록(2026년)
구글 mcp-toolbox 0.3.0~1.4.0의 범용 HTTP 소스·도구 리다이렉트 제한과 대상 IP 검증이 없음 PR #3448·v1.5.0(6월 18일), CVE-2026-14540 공개(7월 31일)
JP모건체이스 결제 개발자 문서 MCP 서버의 related() 도구 옆 도구의 도메인 허용목록 없이 호출자가 준 URL을 가져옴 커밋 6649f9c(9월 18일)
data.gouv.fr(프랑스) 공식 MCP 서버의 OpenAPI 명세 조회 도구 데이터 제공자가 정한 URL로 루프백·사설망·클라우드 메타데이터에 요청 가능 PR #126(9월 4일)
탕그랑시 정부(인도네시아) Wazuh-MCP-Server의 웹셸 점검 도구 사설·루프백·예약·링크로컬 IP를 직접 적은 주소만 거부하고 호스트명은 해석하지 않음 커밋 2bbfe12(9월 2일), GHSA-pw2j-pj4h-f5vg(9월 3일, high)
Weaviate 벡터DB 본체의 구글 연동 모듈(MCP 서버 아님) 검증 없는 apiEndpoint로 운영자 구글 자격증명이 임의 호스트로 갈 수 있음 PR #12961·v1.39.3(9월 7일), 보안 공지(10월 1일)

구글, data.gouv.fr, 탕그랑시, Weaviate의 기록에는 연구자가 신고자로 올라 있고, JP모건 건은 수정 커밋으로 확인된다.

  • 구글: 보안 권고에 따르면 공격자나 악성 프롬프트가 조작한 경로 파라미터로 대상 백엔드에서 오픈 리다이렉트(또는 목적지 바꿔치기)를 일으키면, 툴박스가 그 리다이렉트를 그대로 따라가 내부나 임의의 외부 엔드포인트로 요청을 보냈다. 점수는 구글(CNA)의 CVSS 4.0 기준 8.0(HIGH)과 NVD의 CVSS 3.1 기준 6.1(MEDIUM)로 갈리고, CISA의 SSVC 평가(7월 31일) 시점에는 실제 악용 증거가 없었다. 패치는 CVE 공개보다 약 6주 먼저 나왔다.
  • JP모건체이스: 연구자에 따르면 AWS 원본 서버는 호출자 URL을 직접 가져오지 않았는데, 포크하면서 가져오기 기능을 넣고 허용목록은 빠뜨렸다. 그는 이런 구멍은 스캐너가 잡지 못하고 두 버전을 나란히 놓고 읽어야 보인다고 했다.
  • data.gouv.fr: PR 설명에 따르면 수정 전에는 공격자 PC가 아닌 mcp.data.gouv.fr 서버가 요청을 보냈고, 내부 포트 개폐에 따라 오류 문구가 달라져 그것만으로 내부망을 스캔할 수 있었다.
  • 탕그랑시: 실제 Wazuh SIEM에 넓은 읽기·쓰기 권한을 주는 도구 132개짜리 '블루팀' 서버다. 'SSRF 보호'를 내세웠지만 사설·루프백·예약·링크로컬 IP를 직접 적은 주소만 차단하고, 호스트명이 이런 주소로 해석되는지는 확인하지 않았다. 리다이렉트 추종 옵션을 켜면 curl -L로 재검증 없이 따라가기도 했다.
  • Weaviate: 보안 공지에 따르면 CVSS 7.1(High)이고 악용 징후는 없다. generative-google을 쓰도록 설정된 컬렉션이라면 읽기 권한만으로 GraphQL 쿼리에서 apiEndpoint를 바꿀 수 있었고, USE_GOOGLE_AUTH를 켠 배포에서는 cloud-platform 범위의 OAuth 토큰이 새어 나갈 수 있었다. 선택 사항인 기존 연결 시점 보호도 루프백·사설·링크로컬만 막아, 공격자의 공인 호스트로 자격증명이 가는 것은 막지 못했다.

직접 만든 가드가 거듭 뚫린 곳도 있다. anymd(옛 pdf-reader-mcp)에는 2026년 6~9월 IPv6 전환 주소 우회(7월), file://를 통한 허용 경로 밖 로컬 PDF 읽기(7월), 두 신고자가 같은 DNS 리바인딩 우회를 각각 신고한 권고(9월) 등이 쌓였다. 여러 MCP 프로젝트의 메인테이너가 2026년 9월 한 달 동안 연구자를 신고자로 올려 게시한 GitHub 보안 권고는 16건이다. 등급은 critical 2건(pluggedin-app의 명령 인젝션, jupyter-mcp-server의 기존 수정 우회), high 6건, medium 8건이고 유형은 SSRF, 명령 인젝션, 인증 누락, 세션 탈취, 자격증명 유출까지 걸친다.

공개 MCP 서버의 관리 상태

보안 업체 OX Security의 협찬 기고(업체 자체 조사)에 따르면 레지스트리 5곳에 공개 등록된 MCP 서버 15,465개는 고유 호스트명 5,095개였다. 호스트명의 15.6%는 미국 밖 인프라로 해석됐고(중국 19개, 러시아 18개), 0.45%는 ngrok 무료판 같은 개인용 터널을 거쳤다. 2.3%는 도메인이 더 이상 해석되지 않았고, 그중 6개는 만료 도메인이라 누구나 연 4~12달러에 등록해 그 주소를 부르는 에이전트들의 요청을 넘겨받을 수 있다.

원인: MCP 경계를 넘는 데이터를 믿는다

연구자는 두 유형의 원인을 하나로 본다. 개발자가 MCP 경계를 오가는 데이터를 '시스템 안쪽에서 왔다'는 이유로 믿지만, 에이전트 파이프라인에서는 이 가정이 성립하지 않는다. MCP는 함수를 에이전트에 노출하기는 아주 쉽게 해 주지만 '각 인자를 누가 통제하나, 돌아오는 데이터는 어떻게 되나'를 묻게 하는 단계가 없어, 개인의 부주의보다 구조의 문제라는 것이다. 그는 위험한 입력이 코드 경로가 아니라 전송 계층을 거쳐 모델이 고른 도구 인자로 들어오므로 SCA·의존성 스캐너로는 보이지 않는다고 했다.

에이전트가 여럿이면 경계는 더 흐려진다. 연구자가 '프로토콜 피벗팅'이라 부르는 예에서는 MCP 도구 결과에 섞인 에이전트 간 작업 지시(A2A) 모양의 문장을 지휘 에이전트가 작업 에이전트에 넘기고, 작업 에이전트는 지휘 에이전트를 믿고 실행한다(공격 유형 정의는 2026년 5월 Zenodo 프리프린트, 동료 심사 전). 연구자는 10월 업데이트에서 그 작업 에이전트가 SSRF가 있는 MCP 서버를 쥐고 있으면 요청이 신뢰 경계 안쪽에서 출발한다고 덧붙였다. 다만 프로토콜 피벗팅 자체는 SSRF 없이도, 외부로 요청을 보내거나 특권 작업을 하는 도구만 있으면 성립한다고 밝혔다.

MCP 서버 보안 점검: 기업 자가점검 7가지

아래 7개 질문에 예/아니오로 답한다. 1·2번은 외부 MCP 서버를 연결해 쓰는 쪽, 3·5·6번은 MCP 서버를 직접 만들거나 운영하는 쪽, 4·7번은 둘 다 해당한다. 기준은 현재 프로토콜 버전인 2026-07-28판 MCP 명세와 공식 보안 문서다. 이 판에서는 프로토콜 세션이 사라지고, 호출 사이의 상태는 서버가 발급한 핸들을 도구 인자로 주고받는다. 이전 판을 쓰는 서버에도 대부분 그대로 적용된다. '아니오'인 항목부터 조치한다.

1. 연결한 MCP 서버의 목록과 출처를 관리하는가

공식 문서 'Local Server Security'는 승인 서버 허용목록(버전 고정)과 등록 기준(게시자 식별, 소스 공개, 출처 메타데이터, SBOM)을 두고 클라이언트 설정 파일로 인벤토리를 계속 관리하라고 한다. 컨테이너 실행을 기본으로 하고, 사고가 나면 모든 설치처에서 외부로 나가는 요청(egress)을 막고 넘겨준 자격증명을 전부 교체한다. 버전을 고정했다면 릴리스 노트도 직접 챙긴다. 구글 건처럼 패치가 CVE보다 먼저 나올 수 있다.

2. 원격 MCP 서버를 공개 코드만 보고 믿지 않는가

로컬 서버를 다루는 공식 문서 'Local Server Security'도 '어떤 점검도 서버가 실제로 무엇을 할지 증명하지 못한다'고 전제하고, 승인 뒤 도구 정의를 몰래 바꾸는 러그풀은 한 번의 동의나 버전 고정으로 막지 못한다고 경고한다(원격 서버는 이 문서의 범위 밖이다). 원격 서버에 대해서는 OX Security(협찬 기고)가 공개 저장소와 다른 코드를 돌릴 수 있다고 지적했다. 원격 서버는 도메인이 해석되는 나라, 도메인 소유 유지, 개인용 터널 여부까지 보고 허용목록에 넣는다.

3. 토큰을 그대로 넘기거나 핸들·세션을 인증으로 쓰지 않는가

MCP 서버는 자신을 대상(audience)으로 발급되지 않은 토큰을 받으면 안 되고, 받은 토큰을 상위 API에 그대로 넘겨도 안 된다(MUST NOT). 상태 핸들을 가졌다는 사실만으로 인증으로 취급하면 안 되고(MUST NOT), 핸들은 검증된 토큰의 사용자 ID에 서버 쪽에서 묶어 두기를 권한다(SHOULD). 아직 2025-11-25판을 쓰는 서버라면 세션을 인증에 쓰지 말고(MUST NOT), 세션 ID를 <user_id>:<session_id>처럼 검증된 사용자 ID에 묶는다(SHOULD). Repliers MCP 서버(GHSA-f6c5-f2ph-7x7p)는 호스팅(PropelAuth) 모드에서 토큰 검사와 세션 조회가 연결되지 않아, 인증된 사용자가 남의 세션 ID를 손에 넣으면 피해자의 API 키로 도구를 실행할 수 있었다. 정적 client ID를 쓰면서 MCP 클라이언트의 동적 등록을 허용하는 프록시 서버는, 외부 인가 서버로 넘기기 전에 사용자에게 해당 클라이언트별 동의를 받아야 하고(MUST), 인가 요청의 redirect_uri가 등록값과 정확히 일치하는지도 검증해야 한다(MUST). MCP 인증 결함 사례는 CISA KEV AI 인프라 3종 등재에도 있다.

4. 도구 권한은 최소로 두고, 위험한 작업은 사람이 승인하는가

공식 보안 모범 사례는 읽기 위주의 최소 범위(scope)로 시작해 필요할 때 올리라고 권하고, *·all 같은 통짜 범위를 흔한 실수로 든다. Tools 명세는 서버에 접근 통제와 호출 속도 제한을 요구하고(MUST), 클라이언트에는 민감한 작업의 사용자 확인을 권한다. 로컬용 서버는 stdio를 쓰거나, HTTP라면 인가 토큰이나 IPC로 접근을 제한한다. 취약 버전의 CryptoAPIs MCP 서버(GHSA-mhj6-wq83-cqf5)는 README 예시처럼 운영자 API 키를 넣어 HTTP 모드로 실행하면, 0.0.0.0에서 호출자를 인증하지 않아 포트에 접근한 사람이 운영자의 키로 모든 도구를 호출할 수 있었다. 권한 남용 시나리오는 AI 에이전트 보안에 정리했다.

5. 외부로 나가는 요청을 제한하고, 연결 시점에 목적지를 다시 확인하는가

공식 보안 모범 사례의 SSRF 절은 클라이언트의 OAuth 메타데이터 조회와 인가 서버 쪽 SSRF를 다루고, 서버가 도구 인자로 받은 URL을 가져오는 경우는 직접 다루지 않는다. 이 경우는 Tools 명세의 '서버는 모든 도구 입력을 검증해야 한다(MUST)'에 해당하므로 SSRF 절의 완화책을 서버에도 적용한다. 공식 보안 모범 사례는 운영 환경에서 OAuth 관련 URL에 HTTPS를 쓰고, 사설·예약 주소(10/8, 172.16/12, 192.168/16, 127/8, ::1, 169.254/16, fc00::/7, fe80::/10)로 향하는 요청을 차단하며, 리다이렉트 목적지에도 같은 제한을 적용하도록 권한다(SHOULD). 자동 추종을 끄고 단계마다 검증하는 방안, 외부 요청을 한곳으로 모으는 egress 프록시, 검사와 사용 사이 DNS 결과 고정은 네트워크 환경에 맞춰 검토하라고 한다. 도구의 URL 조회에도 이 원칙을 적용하되, 업무상 필요한 내부 목적지는 명시적으로 허용한다. 직접 만든 파서는 8진수·16진수 표기나 IPv4 매핑 IPv6 같은 수법을 놓치기 쉬워 IP 검증은 직접 구현하지 말라고도 한다. data.gouv.fr은 핵심 플랫폼 udata의 방식을 가져와 연결 시점에 목적지 IP를 검증하고, JP모건은 169.254.169.254와 file:// 주소를 회귀 테스트에 넣었다. 자격증명이 붙는 요청에는 사설 IP 차단에 더해 목적지 호스트 허용목록을 둔다(Weaviate 교훈). playwright-mcp 메인테이너가 내부 주소 이동 이슈를 닫으며 권고한 대로, 민감한 시나리오에서는 브라우저 자동화 서버를 네트워크 접근을 설정할 수 있는 샌드박스에서 돌린다.

6. 상위 API 응답 원문과 비밀값을 로그·도구 출력에 남기지 않는가

상위 API 오류 응답에는 요청에 담긴 개인정보나 토큰이 그대로 들어 있을 수 있다. 로그에 쓰기 전에 가린다. Tools 명세는 도구 출력 정화도 요구한다(MUST). 커뮤니티 프로젝트 1Password-MCP(@takescake/1password-mcp 4.0.2 미만, 1Password 공식 제품 아님, GHSA-q3gg-rgxh-gh64)는 op_run 도구가 서버 환경 변수 전체를 자식 프로세스에 복사했고, 출력 가리기도 op:// 참조 값에만 적용돼 env를 실행하면 마스터 서비스 계정 토큰이 모델 대화 기록에 평문으로 돌아왔다. 가리되 감사 로그는 남긴다. 2026년 5월 프리프린트는 당시 MCP·A2A 구현이 프로토콜 경계를 잇는 전 구간 감사 로그를 제공하지 않아, 이런 공격을 사후에 찾기 어렵다고 지적했다.

7. 도구가 돌려준 내용을 지시로 믿지 않도록 설계했는가

도구 이름과 설명은 모델이 지시로 읽는 입력이다. 공식 문서는 도구 이름·설명을 악용한 도구 오염과 다른 서버 도구를 가로채는 섀도잉을 경고하고, Tools 명세는 도구의 동작 특성을 나타내는 annotations도 신뢰할 수 있는 서버에서 온 것이 아니면 믿지 말라고 한다(MUST). 도구 결과도 같다. Tools 명세는 결과를 LLM에 넘기기 전에 검증하기를 권하고, 5월 프리프린트는 맥락 출처 태깅, 위임 범위 서명, 프로토콜 경계 정화를 제안했다. 도구 결과에서 온 문장에는 출처를 붙이고, 작업 에이전트에 넘기기 전에 거른다. 인젝션이 실행 권한 탈취로 이어지는 과정은 에이전트 AI를 해킹하는 법에 정리했다.

국내 도입 현황: 연결은 쉬워지고 있다

전자신문에 따르면 카카오 '플레이MCP'에 공개 등록된 MCP 서버는 2026년 9월 16일 기준 468개로 2025년 9월 15개의 약 31배이고, 최근 한 달 하루 평균 호출은 10만9,325회다. 서울시, 한국지능정보사회진흥원(NIA), 삼성SDS, LG CNS도 MCP 플랫폼·서비스를 만들었다.

연합뉴스에 따르면 다올투자증권은 생성형 AI 대화창과 증권계좌를 잇는 'MCP 트레이딩'을 정식 개시했다고 10월 1일 밝혔다. 주문은 AI의 미리보기를 거쳐 고객이 최종 승인해야 거래소로 가고, 미리보기 없는 주문이나 중복 주문은 시스템이 막는다. 점검 4번의 사람 승인을 설계에 넣은 사례다. 파이낸셜뉴스에 따르면 자금이체 기능이 없는 로컬 방식이고 '파이(Fi)' 앱에서 발급한 연결키로 연동한다. 같은 로컬 방식을 만든다면 연결키가 PC 어디에 어떻게 저장되는지도 점검 대상에 넣는다.

라이너는 1,100여 개 외부 도구를 한 번에 잇는 '라이너 액션즈 MCP'를 출시했다고 9월 29일 밝혔다(전자신문). 회사는 중계만 하고 사용자 데이터를 저장하지 않는다고 설명했다(지디넷코리아, 독립 검증 없음). 이런 중계 구조라면 점검 3번(받은 토큰을 그대로 넘기지 않는지, 정적 client ID로 동적 등록 클라이언트를 받는다면 사용자에게 클라이언트별 동의를 받고 redirect_uri 정확 일치를 검증하는지)을 확인한다. KISA 「AI 보안 위협 대응 매뉴얼」도 외부 MCP 서버를 확장요소 위협의 예로 든다(매뉴얼 요약).

연결한 도구가 무엇을 실행하고 어디로 데이터를 넘기는지 확인하기

보안 전문 기업 SENTRIX의 AI 심화 취약점 진단 가운데 'LLM·AI 서비스 자체의 보안 검증'은 데이터·도구·테스트 계정을 미리 협의한 범위에서 프롬프트 입력, 검색 자료의 접근 권한, AI 에이전트의 도구 실행·데이터 전달 범위를 확인한다. 에이전트가 MCP 도구를 승인 없이 실행할 수 있는지, 어떤 데이터를 어디로 넘기는지가 여기에 들어간다. 모든 우회 탐지나 모델 안전 인증을 보장하는 서비스는 아니다. 사내 시스템을 MCP로 AI 에이전트에 연결했다면, 에이전트가 그 도구로 무엇을 실행하고 어떤 데이터를 어디로 넘기는지 확인하세요. 진단 문의하기

참고 자료

MCP로 연결한 도구, 에이전트가 무엇을 실행하는지 확인하세요

보안 실무 10년 전문가가 기업 환경에 맞는 방안을 제시합니다.