
보안 기업 Bright Security의 공식 연구에 따르면 터미널 화면에서 글자를 숨기거나 화면을 지우는 ANSI 제어문자가 모델 컨텍스트 프로토콜(MCP) 서버를 거쳐 AI 에이전트의 입력으로 전달될 수 있다. 연구진은 사람이 보는 화면과 모델이 받는 원시 데이터의 차이를 이용한 이 공격 개념을 ‘ANSI 이스케이프 시퀀스 주입(AESI)’이라고 설명했다.
ANSI 이스케이프 시퀀스는 ESC 바이트와 뒤따르는 제어 코드로 구성된다. 터미널은 이를 일반 문자 대신 색상 변경, 글자 숨김, 커서 이동, 화면 지우기 같은 명령으로 처리한다. 검토자는 렌더링된 화면에서 지시문을 보지 못할 수 있지만, 제어문자가 제거되지 않은 원문이 모델 입력에 포함되면 숨겨진 내용까지 전달될 수 있다는 것이 연구의 핵심이다.
MCP 공식 사양은 이런 데이터 경로가 존재한다는 점을 보여준다. 도구 호출 결과는 content 배열의 text로, 리소스 읽기 결과는 contents 배열의 text로, 프롬프트 조회 결과는 messages 안의 text 콘텐츠로 전달된다. 도구 사양은 서버가 출력을 정화하고 클라이언트가 결과를 모델에 넘기기 전에 검증해야 한다고 명시한다. 프롬프트 사양도 입력과 출력의 검증을 요구한다.
연구진은 공격 경로를 직접 가져오기와 저장형 두 가지로 나눴다. 직접 가져오기 방식에서는 공격자가 제어문자와 지시를 넣은 외부 콘텐츠를 만들고, URL을 읽는 MCP 도구가 이를 가져와 모델이 소비하는 응답 필드에 그대로 싣는다. 저장형 방식은 노트나 댓글, 레코드 같은 데이터에 제어문자를 먼저 기록한 뒤 다른 MCP 도구나 리소스가 나중에 이를 읽어 모델 입력으로 전달하는 구조다.
저장형 공격은 쓰기와 읽기가 분리된다는 점에서 추적이 더 어렵다. 일반 HTTP 요청으로 기록한 데이터가 이후 MCP 리소스 조회에서 다시 나타날 수도 있다. 공격 문자열이 여러 세션과 사용자에게 반복 노출될 가능성도 있어, 개별 요청만 보는 점검으로는 데이터가 모델까지 도달하는지 확인하기 어렵다는 설명이다.
Bright Security가 제시한 자동 탐지는 실행 중인 서버에 외부에서 시험 입력을 보내고 실제 응답을 검사하는 동적 애플리케이션 보안 테스트 방식이다. 탐지기는 렌더링 결과가 아닌 원시 응답 바이트를 읽고, 모델이 소비하는 필드 하나 안에 ANSI 제어문자와 고정 지시문, 시험마다 다른 식별 표지가 함께 남았을 때만 취약 경로로 판정한다. 저장형 점검은 먼저 무해한 표지를 써서 어느 읽기 경로에서 다시 나타나는지 찾은 뒤 같은 경로에 실제 시험 페이로드를 적용한다.
이 연구가 특정 MCP 서버 제품의 취약점을 공개한 것은 아니다. 취약 제품명이나 CVE, 실제 공격에 악용된 사례는 제시되지 않았다. 따라서 모든 MCP 서버가 해당 공격에 노출됐다고 볼 수는 없으며, 외부 또는 저장된 텍스트를 제어문자 정화 없이 모델 입력으로 전달하는 구현에서 성립할 수 있는 위협 모델과 탐지 절차로 봐야 한다.
제어문자를 제대로 중화하지 않아 터미널 출력이 왜곡된 문제는 기존 소프트웨어에서도 확인됐다. NVD의 CVE-2021-25743은 kubectl이 터미널로 내보내는 원시 데이터의 이스케이프·메타·제어 시퀀스를 중화하지 않은 문제를 다룬다. Git의 CVE-2024-52005 공식 권고도 원격 서버가 보낸 메시지의 ANSI 제어문자로 정보를 숨기거나 사용자를 오도할 수 있었던 문제를 설명한다. MCP 연구는 이런 오래된 출력 처리 문제가 AI 에이전트의 모델 입력 경로에서도 다시 나타날 수 있다고 본다.
방어의 초점은 모델에 도달하는 경계에 있다. MCP 서버와 클라이언트는 가져온 웹 문서와 저장 데이터, 도구 결과를 신뢰하지 말고 모델 입력에 넣기 전에 제어 바이트를 제거하거나 안전한 형태로 치환해야 한다. URL 허용 목록과 입력 검증, 민감한 도구 호출의 사용자 확인, 원시 바이트 기반 검사도 함께 적용할 수 있다.
출처: Bright Security 공식 보안 연구 https://brightsec.com/research/detecting-ansi-escape-sequence-injection-in-mcp-servers-with-dast/
Model Context Protocol 공식 사양 https://modelcontextprotocol.io/specification/2025-06-18/server/tools
https://modelcontextprotocol.io/specification/2025-06-18/server/resources
https://modelcontextprotocol.io/specification/2025-06-18/server/prompts
NVD CVE-2021-25743 https://nvd.nist.gov/vuln/detail/CVE-2021-25743
Git 공식 보안 권고 GHSA-7jjc-gg6m-3329 https://github.com/git/git/security/advisories/GHSA-7jjc-gg6m-3329