한 줄 요약: Snowflake Cortex Code CLI에서 샌드박스를 탈출해 악성코드를 실행할 수 있는 취약점이 발견됐다. 간접 프롬프트 인젝션으로 에이전트가 승인 없이 임의 명령을 실행하고, 사용자의 Snowflake 자격증명으로 데이터를 탈취할 수 있었다. AI 코딩 에이전트 보안의 구조적 문제를 보여주는 사례다.
이 글이 필요한 사람
- AI 코딩 에이전트(Claude Code, Cursor, Codex 등)를 실무에서 사용하는 개발자
- AI 도구의 보안 정책을 설계하는 DevSecOps 엔지니어
- 에이전틱 AI의 보안 리스크를 평가해야 하는 보안 담당자
- 프롬프트 인젝션 공격 벡터를 이해하려는 개발자
기준일: 2026년 3월 22일. 출처: PromptArmor 보안 리포트, Simon Willison 분석, Hacker News 토론
Snowflake Cortex Code CLI는 Claude Code, OpenAI Codex와 유사한 터미널 기반 AI 코딩 에이전트다. 2026년 2월 2일 출시 후 단 이틀 만에 보안 연구팀 PromptArmor가 치명적 취약점을 발견했다.
공격 시나리오:
- 공격자가 GitHub 레포지토리의 README에 프롬프트 인젝션을 삽입한다
- Cortex Code 사용자가 해당 레포지토리를 검토하도록 에이전트에 요청한다
- 에이전트가 README를 읽으면서 숨겨진 지시를 실행한다
- 에이전트가
cat 명령어를 "안전한 명령"으로 분류해 승인 없이 실행한다 - 그러나 명령 본문에 프로세스 치환(process substitution)이 포함되어 있어 임의 스크립트를 다운로드·실행한다
- 악성 스크립트가 사용자의 Snowflake 자격증명으로 데이터 탈취, 테이블 삭제 등을 수행한다
타임라인:
- 2026년 2월 2일: Cortex Code CLI 출시
- 2026년 2월 5일: PromptArmor가 Snowflake에 취약점 보고
- 2026년 2월 28일: Cortex Code CLI v1.0.25에서 패치 완료
- 2026년 3월 18일: PromptArmor가 보안 리포트 공개
이 취약점의 근본 원인은 두 가지다:
1. 명령어 화이트리스트의 허점
Cortex Code는 cat, ls, head 등을 "안전한 명령"으로 분류해 사용자 승인 없이 자동 실행했다. 그러나 bash에서 cat 명령의 인자로 프로세스 치환(<(curl ...))을 넣으면 임의 명령이 실행된다. 명령어 이름만 검증하고 인자를 검증하지 않은 것이 핵심 허점이다.
2. 간접 프롬프트 인젝션에 대한 방어 부재
에이전트가 외부 콘텐츠(README, 코드 파일 등)를 읽을 때, 그 안에 포함된 지시를 사용자의 지시와 동일하게 처리했다. "이 내용을 읽어라"와 "이 명령을 실행하라"의 구분이 없었다.
이 취약점은 Snowflake 고유의 문제가 아니다. 현재 모든 AI 코딩 에이전트가 유사한 구조적 위험을 가지고 있다:
| 에이전트 | 명령 실행 방식 | 방어 메커니즘 |
|---|
| Claude Code | 사용자 승인 기반 | 권한 모드 3단계, 도구별 화이트리스트, CLAUDE.md 정책 |
| OpenAI Codex | 샌드박스 + 승인 | 컨테이너 격리, 네트워크 제한 |
| Cursor | IDE 내 샌드박스 | 파일 시스템 범위 제한, 터미널 격리 |
| Cortex Code (패치 전) | 명령어 이름 화이트리스트 | 인자 검증 없음 (취약) |
Claude Code의 3단계 권한 모드(기본/승인/skip-permissions)와 도구별 화이트리스트 시스템이 상대적으로 견고한 편이지만, 간접 프롬프트 인젝션은 모든 에이전트의 공통 과제다.
이 사건에서 도출할 수 있는 실무 보안 수칙:
1. 신뢰할 수 없는 코드를 에이전트로 검토하지 않는다
외부 레포지토리를 에이전트에 맡기기 전에, 최소한 README와 설정 파일을 직접 확인한다. 프롬프트 인젝션은 주로 문서 파일에 숨겨진다.
2. 권한을 최소화한다
Claude Code의 경우 --dangerously-skip-permissions는 신뢰할 수 있는 프로젝트에서만 사용한다. 기본 모드에서 에이전트의 모든 명령 실행을 승인하는 습관을 유지한다.
3. 에이전트의 네트워크 접근을 제한한다
프로덕션 데이터베이스 자격증명이 있는 환경에서 에이전트를 실행하지 않는다. 별도의 개발 환경이나 컨테이너에서 에이전트를 실행하는 것이 안전하다.
4. 자격증명을 환경 변수에만 보관한다
.env 파일이 에이전트에 의해 읽히지 않도록 .gitignore와 에이전트 설정에서 제외한다.
5. 에이전트 도구를 최신 버전으로 유지한다
Cortex Code의 경우 자동 업데이트로 패치가 적용됐지만, 수동 설치한 도구는 직접 업데이트해야 한다.
이 사건은 개별 제품의 버그를 넘어, 에이전틱 AI 보안의 구조적 과제를 보여준다:
도구 실행 권한의 딜레마: 에이전트가 유용하려면 파일 읽기, 명령 실행, 네트워크 접근이 필요하다. 그러나 이 권한은 동시에 공격 표면이 된다. "편의성과 보안의 트레이드오프"는 AI 에이전트에서 더 극단적이다.
간접 프롬프트 인젝션의 근본적 한계: 현재 LLM은 "사용자의 지시"와 "문서 안의 지시"를 완벽하게 구분할 수 없다. 이 문제가 해결되기 전까지 에이전트의 자율성에는 구조적 상한이 있다.
NVIDIA OpenShell 같은 보안 런타임의 필요성: GTC 2026에서 발표된 NVIDIA Agent Toolkit의 OpenShell은 정책 기반 행동 제한을 제공한다. 이런 보안 런타임 레이어가 업계 표준이 되어야 에이전트를 프로덕션에 안전하게 배포할 수 있다.
Dark Reading의 보도에 따르면, NVIDIA OpenShell(구 OpenClaw)에서도 유사한 취약점이 발견돼 패치됐다. 보안 런타임 자체도 완벽하지 않으며, 지속적인 보안 감사가 필수다.