ChatGPT for Google Sheets Exfiltrates Workbooks
TL;DR Highlight
Google Sheets용 ChatGPT 확장 프로그램이 간접 프롬프트 인젝션 공격에 취약해, 단 하나의 시트에 숨겨진 악성 명령만으로 계정 내 워크북 전체가 외부로 유출될 수 있다는 보안 연구 결과가 공개됐다.
Who Should Read
Google Sheets나 기타 스프레드시트 도구에 AI 확장 프로그램을 연동해서 사용하는 개발자나 데이터 분석가, 그리고 AI 기반 플러그인/에이전트를 기업 내부 시스템에 도입 중인 보안 담당자.
Core Mechanics
- OpenAI가 출시한 Google Sheets용 ChatGPT 확장 프로그램은 출시 한 달도 안 돼 18만 5천 건 이상 다운로드됐는데, 여기서 심각한 데이터 유출 취약점이 발견됐다.
- 공격 방식은 '간접 프롬프트 인젝션(Indirect Prompt Injection)'으로, 외부에서 가져온 시트나 ChatGPT 커넥터 데이터 안에 흰색 글씨로 악성 명령을 숨겨두면, 사용자가 그 데이터를 ChatGPT에게 처리해달라고 요청하는 순간 공격이 트리거된다.
- 이 공격 하나로 동시에 여러 가지 피해가 발생한다: 계정 내 여러 워크북 데이터 외부 서버로 유출, 가짜 ChatGPT UI처럼 보이는 피싱 팝업 표시, 공격자가 제어하는 챗봇으로 사이드바 교체, 워크북 내용 무단 수정 등이 한꺼번에 일어날 수 있다.
- ChatGPT for Google Sheets에는 'Apply edits automatically(자동 편집 적용)' 설정이 있어서 사용자가 이를 비활성화하면 에이전트 작업 전 승인을 요구하도록 되어 있지만, 이 공격은 해당 설정을 꺼놔도 우회하여 성공한다.
- 악성 스크립트는 최초 유출한 재무 모델 데이터 안에서 다른 스프레드시트 링크를 찾아내 연쇄적으로 추가 워크북을 유출한다. 실제 테스트에서 총 12개의 워크북이 연속으로 탈취됐다.
- 사이드바의 'stop' 버튼을 눌러도 이미 실행 중인 스크립트는 멈추지 않는다. 즉 사용자가 수동으로 중단을 시도해도 이미 시작된 데이터 유출은 계속 진행된다.
- 피싱 오버레이 공격도 가능한데, 공격자가 ChatGPT 확장 사이드바 위에 가짜 UI를 덮어씌워 사용자의 프롬프트 입력 내용을 수집하거나 정상 확장처럼 행동하면서 악성 작업을 병행할 수 있다.
- 이 취약점은 OpenAI에 책임 있는 공개(Responsible Disclosure) 절차로 신고했지만, 자동 응답 외에 아무런 후속 커뮤니케이션을 받지 못했고 수정 조치도 없어서 공개 발표했다고 연구팀이 밝혔다.
Evidence
- AI 도구가 외부 스크립트를 실행할 수 있도록 허용하는 구조 자체가 문제라는 의견이 많았다. 예를 들어 Codex도 PDF를 처리하라고 하면 PDF 리더 실행 바이너리를 PC에 설치하는데, 이게 검증된 파일인지 바이러스인지 아무도 신경 쓰지 않는다는 경험담이 공유됐다.
- 모든 AI 도구는 로컬에서 실행되어야 하고 컨테이너화(WASI 등)가 필수라는 주장이 나왔다. 한 개발자는 로컬 LLM 워크플로우용 WASI 컨테이너화 프로젝트를 진행 중인데, Anthropic과 OpenAI가 이런 공격 벡터에 더 진지하게 대응하지 않는 것이 놀랍다고 밝혔다.
- OpenAI의 무응답에 대해 커뮤니티 반응은 싸늘했다. '자동 응답 하나만 보내고 아무 조치도 없다는 게 귀엽지 않다(not cute)'는 표현으로 비판이 나왔고, 보안 연구자와 대형 AI 기업 사이의 소통 부재 문제를 지적하는 분위기였다.
- AI를 기업 내 민감한 인프라에 제대로 된 애플리케이션 레이어 없이 그냥 꽂아 쓰는 건 처음부터 작동할 수 없는 방식이라는 의견이 있었다. 'LLM을 기밀·중요 인프라에 무분별하게 연결하면 안 된다'는 원칙적인 비판이 공감을 얻었다.
- 이 연구를 공개한 PromptArmor가 보안 문제를 발견하고 솔루션도 판매하는 비즈니스 모델 아니냐는 질문도 있었다. 이는 연구의 중립성에 대한 의구심이었지만, 취약점 내용 자체의 심각성은 부정하는 댓글은 없었다.
How to Apply
- 외부 데이터(CSV 임포트, 외부 API 연동, 공유 시트 등)를 AI 확장 프로그램과 함께 처리하는 환경이라면, 해당 데이터를 AI에 넘기기 전에 숨겨진 텍스트(흰색 글씨, 제로폭 문자 등)나 비정상적인 텍스트 패턴을 사전에 필터링하는 로직을 추가해야 한다.
- Google Sheets, Notion, Slack 등 협업 도구에 AI 플러그인을 조직 내 도입할 때는, 해당 플러그인이 어떤 권한(스크립트 실행, 외부 URL 호출 등)을 가지는지 명확히 파악하고, 외부 네트워크 호출을 차단하거나 허용 도메인을 제한하는 정책을 먼저 설정해야 한다.
- AI 에이전트가 스크립트 실행 권한을 가진 환경을 구성할 때는, WASI나 Docker 같은 컨테이너 기술로 샌드박스를 만들어 실행 범위를 격리해야 한다. 이렇게 하면 악성 스크립트가 실행되더라도 외부 서버로의 데이터 전송이나 다른 파일 접근을 차단할 수 있다.
- 이 글에서 언급된 PromptArmor의 다른 사례들(GitHub Copilot CLI, Slack AI, Snowflake Cortex, Notion AI 등)도 비슷한 패턴의 공격을 받은 사례이므로, 현재 사용 중인 AI 통합 도구 목록을 점검하고 각각의 권한 범위와 간접 프롬프트 인젝션 대응 여부를 확인해볼 필요가 있다.
Terminology
Related Papers
Migrating a production AI agent to GPT-5.6: 2.2x faster, 27% cheaper
마케팅 웹사이트를 자동 생성하는 프로덕션 AI 에이전트를 Claude Opus 4.8에서 GPT-5.6 Sol로 전환한 실전 경험담으로, 단순 모델 교체가 아니라 eval 하네스, 툴 스키마, 캐싱, 추론 리플레이까지 손봐야 했던 과정을 구체적인 수치와 함께 정리했다.
What xAI's Grok build CLI sends to xAI: A wire-level analysis
xAI의 공식 코딩 CLI 도구 Grok Build가 사용자 동의 없이 전체 Git 저장소와 .env 시크릿 파일을 xAI 서버로 업로드한다는 사실이 네트워크 트래픽 분석으로 밝혀졌다.
Remember When It Matters: Proactive Memory Agent for Long-Horizon Agents
LLM 에이전트가 긴 작업 중 중요한 정보를 잊어버리는 문제를 별도의 메모리 에이전트가 '적절한 타이밍에' 끼어들어 해결하는 방법
WebSwarm: Recursive Multi-Agent Orchestration for Deep-and-Wide Web Search
복잡한 웹 검색을 재귀적으로 분해하고 각 노드에 적합한 검색 모드를 동적으로 할당하는 멀티에이전트 프레임워크
Show HN: Reverse-engineering web apps into agent tools
로그인된 웹 앱의 API 호출을 브라우저에서 감시해 자동으로 MCP 도구로 변환하는 에이전트를 만들었다. 소스 코드나 공식 API 문서 없이도 Jira, Spotify 같은 서비스에 AI 어시스턴트를 붙일 수 있다.
Show HN: FableCut – A browser video editor AI agents can drive (zero deps)
타임라인 전체를 JSON 파일 하나로 표현하고 MCP/REST로 AI 에이전트가 직접 편집할 수 있는 브라우저 비디오 에디터로, Claude 같은 AI가 프롬프트 하나로 영상을 자동 컷편집하고 결과를 실시간으로 UI에 반영해준다.