ダウンロードフォルダで Claude Code や Codex を起動してはいけないのはなぜ?
'다운로드한 파일 정리나 zip 압축 해제를 AI에게 맡기고 싶다'고 생각해 본 적이 없으신가요? 터미널에서 cd ~/Downloads로 이동하여 Claude Code나 Codex를 실행하면 바로 도움을 받을 수 있습니다. 편리하지만, 이런 사용법은 삼가야 합니다.
2026년 10월 22일, 보안 기업 Forever Security는 다운로드 폴더에 놓인 단 한 장의 Markdown 파일만으로 AI 에이전트가 탈취당하는 공격을 공개했습니다. 이는 실제 고객의 PC에서 발견된 사례입니다. X(구 Twitter)에서는 '절대 다운로드 폴더에서 Claude Code나 Codex를 실행하지 말라'는 게시물이 퍼졌고, 중지마 씨의 YouTube 영상에서도 해설되었습니다.
본 기사에서는 이 이야기를 '무엇을 해서는 안 되는가', '왜 해서는 안 되는가' 두 가지 관점으로 정리합니다. 원본 리포트와 각 사의 공식 문서를 통해 사실을 확인했으며, 가지고 있는 Mac 환경에서 무해한 표시만 한 파일을 사용하여 시스템 일부를 재현했습니다.
이 기사의 확인 범위
- 확인일: 2026년 10월 28일
- 일차 정보: Forever Security의 'Markdown Is the New Executable' (2026년 10월 22일), BleepingComputer 보도(10월 25일), Claude Code 및 Codex 공식 문서
- 계기: 중지마 씨의 YouTube 영상 '90% 이상의 확률로 PC를 탈취당하는 악마적인 공격 수법을 발견했습니다…'
- 자체 검증: macOS, Claude Code 2.1.296, Codex CLI 0.159.2 (GPT-6.1 Sol), Google Chrome 156. 실제 다운로드 폴더는 사용하지 않고 가짜 폴더로 테스트를 진행했습니다. 공격의 내용은 재현하지 않았습니다.
- Claude Code는 CLI 로그인 상태가 아니었기 때문에 AI의 답변까지는 확인하지 못했습니다. 어떤 파일이 로드되는지는
/context
명령어로 확인했습니다.
예상 독자:Claude Code나 Codex를 사용하기 시작한 분, 엔지니어는 아니지만 AI 에이전트로 작업을 자동화하는 분들. 전문 용어에는 짧은 설명을 덧붙였으며, 마지막에 용어 목록도 첨부합니다.
左は、ダウンロードフォルダでAIを起動した場合。自分で保存したファイルに、覚えのない指示ファイルが混ざっていても、AIはそれをルールとして読む。右は、作業用フォルダを作り、自分で選んだファイルだけを移してから起動した場合。AIが読むのは自分で確かめた指示だけ
그림 1: 왼쪽은 해서는 안 되는 사용법, 오른쪽은 대체하는 사용법입니다. 차이점은 'AI를 실행하는 장소'뿐이지만, AI가 읽는 지시의 출처가 달라집니다.
결론부터 말씀드리자면: 하지 말아야 할 6가지 것들
우선 전체 내용을 요약합니다. 이유는 뒤에서 순서대로 설명하겠습니다.
| # | 해서는 안 되는 것 | 위험한 이유 (한마디로) | 대신 해야 하는 것 |
|---|
| 1 | 다운로드 폴더(및 그 내부 폴더)에서 에이전트를 실행하는 것 | 웹페이지가 임의로 배치한 지시 파일을 AI가 '당신의 규칙'으로 읽게 함 | 작업용 폴더를 만들고, 필요한 파일만 옮긴 후 실행하기 |
| ... | 신뢰 확인은 폴더에 대해 단 1회만. 나중에 놓인 파일은 질문 없이 읽힘 | 실행 전에 ls -la로 확인하고, 생소한 지시 파일은 열어 읽지 않기 | |
| 4 | 승인(Approval)과 샌드박스(Sandbox)를 해제한 채 사용하기 (--yolo 등) | 마지막 안전장치가 사라져서, 지시 파일의 명령이 그대로 실행됨 | 해제하는 것은 일회용 컨테이너나 가상 머신 안에서만 하기 |
| 5 | 설정 파일 수정 (외부 도구 추가/연결처 변경)을 이유를 확인하지 않고 승인하기 | 한 번의 수정으로, 어떤 폴더에서 실행해도 공격이 지속되는 상태가 됨 | 자신이 요청한 변경인지 확인하고, 다르면 거부하기 |
| 6 | '샌드박스 외부에서 실행하고 싶다'는 요구를 작업 일부라고 생각하여 허용하는 것 | 공격 문서는 그것을 '설치에 필요한 절차'처럼 보이게 만듦 | 이유가 자신의 요청과 연결되지 않으면 거부하기 |
1번이 이번 이야기의 핵심이며, 2~6번은 '만약 실행해 버렸더라도 피해를 막기 위한 안전장치(브레이크)'입니다. 1번만 지키면 충분한 것이 아니라, 겹겹이 방어할수록 더 안전합니다.
무슨 일이 일어났나: 단 한 장의 Markdown으로 AI가 탈취당한 사건
실제 PC에서 발견된 공격
발단은 Forever Security의 모니터링 시스템이 내보낸 경고였습니다. 고객의 PC에서 코딩 에이전트가 function-color
이러한 악의적인 npm 패키지(JavaScript 구성 요소)를 설치하려는 것을 막았습니다.
원인을 추적해 보니, 해당 고객의 ~/Downloads 폴더에 AGENTS.md라는 파일이 놓여 있었습니다. 이 파일은 'Engineering Work Guidelines (개발 작업 가이드라인)'을 가장한 약 13KB 분량의 긴 문서였으며, 공격 지시는 끝자락 어딘가에 숨겨져 있었습니다. 게다가 에이전트는 바로 그 다운로드 폴더에서 실행되고 있었습니다.
다만, 이 파일이 어떻게 다운로드 폴더에 들어갔는지는 알 수 없습니다. 연구진은 '웹페이지를 열기만 해도 배치할 수 있다'는 것을 별도로 시연했지만, 실제 공격자가 이 방법을 사용했는지는 불분명합니다.
공격 흐름
연구진이 재현한 과정을 5단계로 나누어 살펴보겠습니다.
- 웹페이지 열기: 이용자는 아무것도 클릭할 필요가 없습니다.
- 지시 파일 조용히 저장: 페이지의 JavaScript가
AGENTS.md나 CLAUDE.md를 다운로드 폴더에 저장합니다.
- 다운로드 폴더에서 AI 실행: 파일을 정리하거나 zip을 압축 해제하도록 이용자가 직접 실행합니다.
- AI가 지시 파일 읽기: Claude Code나 Codex는 실행된 폴더의 지시 파일을 '이 작업의 규칙'으로 가장 먼저 읽어 들입니다.
- AI가 설정 변경: 지시에 따라 자신의 설정 파일에 공격자의 서버를 등록합니다.
Codex와 Claude Code에서 노린 위치
5단계인 '설정 변경'은 Codex와 Claude Code에서 목표로 하는 위치가 다릅니다.
Codex의 경우에는 PC 전체에 영향을 미치는 설정 파일 ~/.codex/config.toml에 공격자의 MCP 서버(AI가 외부 도구와 연결되는 메커니즘)를 등록시켰습니다. 이 과정에서 승인 확인 절차와 샌드박스(AI가 실행하는 명령을 가두는 장치)를 우회하는 실행도 이루어졌습니다. 보고서에 따르면, 안전장치를 해제하라는 지시는 AI 자신이 '설치에 필요하기 때문에' 추가한 것이었으며, 성공률은 90%를 넘었다고 합니다.
일단 등록되면 다운로드 폴더를 닫아도 끝나지 않습니다. 그 후 어떤 프로젝트에서 Codex를 실행해도 공격자의 서버가 로드됩니다.
Claude Code의 경우에는 프로젝트 설정 파일 .claude/settings.json을 통해 Claude Code가 통신하는 목적지 주소를 공격자의 서버로 변경시켰습니다. 그러면 다음에 실행했을 때, Claude의 로그인 토큰(로그인 상태를 증명하는 문자열)이 그 서버로 전송됩니다. 연구진은 이 토큰으로 피해자로서 실제 API를 사용할 수 있었다고 보고했습니다. 코드를 한 줄도 실행하지 않고 계정을 탈취할 수 있게 된 것입니다. 게다가 공격자의 서버가 'AI의 답변'인 척 위장하여, 샌드박스 외부에서 명령을 실행시키는 것도 가능하게 했습니다.
다만, Claude Code에서의 설정 변경 성공률은 약 절반이었습니다. 보고서에 따르면, 이러한 변경에는 사람의 승인이 필요했고, Claude 자체도 비정상적으로 보이는 변경은 거부하는 경우가 많았다고 합니다.
숫자 해석에 주의할 점
X에서 퍼진 게시물에는 '개발자의 약 50%가 다운로드 폴더에서 실행하고 있다'고 되어 있었지만, 원본 보고서의 수치는 'Forever Security 고객 기업의 약 절반에서, 다운로드 폴더에서 실행된 에이전트가 발견되었다'는 것입니다. BleepingComputer에 따르면, 전체 고객을 통틀어 Claude Code만으로도 1,300회 이상의 세션이 다운로드 폴더에서 실행되었습니다.
성공률의 '90% 초과', '약 50%' 역시 시도 횟수/모델/버전이 공개되지 않은, 발표한 기업 자체의 수치입니다. '반드시 탈취된다'가 아니라 '조건이 갖춰지면 높은 확률로 성공한다'고 해석하는 것이 정확합니다.
왜 안 되는가: 세 가지 '평범한 움직임'이 겹칠 때
이 공격이 무서운 이유는 어디에도 버그가 없기 때문입니다. 하나씩 보면 문제가 없는 '평범한 움직임'들이 다운로드 폴더라는 장소에서 중첩될 때 구멍이 생기는 것입니다.
이유 1: 브라우저는 '단순한 문서'를 확인 없이 저장한다
브라우저는 .exe
이러한 실행 파일을 다운로드할 때는 경고를 표시합니다. 열면 프로그램이 작동하여 바이러스에 감염될 위험이 있기 때문입니다. 반면, .md 같은 일반 텍스트(글자만 쓰인 파일)는 열어도 글자가 표시되는 것뿐이라 막기가 거의 불가능합니다.
Chrome, Edge, Firefox는 초기 설정에서 다운로드 위치를 묻지 않고 ~/Downloads에 저장합니다(BleepingComputer의 검증에서는 Brave가 저장 확인을 요청했습니다). 직접 테스트해 본 결과, Chrome 156 버전으로 '열면 JavaScript가 파일을 저장하는 페이지'를 준비하여 확인했을 때도 클릭하지 않았는데 AGENTS.md가 저장되었습니다(검증은 헤드리스 모드로 진행되었으며 일반적인 화면에서의 확인이 아닙니다).
약 30년 동안 이 움직임은 안전했습니다. 문서 파일은 누군가 읽기 전까지 아무것도 하지 않기 때문입니다.
이유 2: AI 에이전트는 지시 파일을 '당신의 규칙'으로 읽는다
하지만 지금은 그 문서를 읽고 실행하는 존재가 있습니다. Claude Code와 Codex에는 작업의 규칙을 적어 놓는 **지시 파일(instruction file)**이 있으며, 이를 시작하면 자동으로 읽어 들입니다.
| Codex | Claude Code | |
| :--- | :--- |
| 읽는 지시 파일 | AGENTS.override.md → AGENTS.md (각 폴더당 1개) | CLAUDE.md, CLAUDE.local.md. 둘 다 없으면 AGENTS.md (2.1.277 이후) |
| 어디서 읽는지 | 프로젝트의 최상위(보통 Git의 최상위)부터 시작 폴더까지. 찾지 못하면 시작 폴더만 | 시작 폴더와 그 위의 모든 폴더 |
| 위치적 의미 | 시작 시 구성되는 '작업 지시' | 세션 초기에 읽어 들이는 '항상 지켜야 할 지시' |
지시 파일에 따르는 것은 에이전트로서 정상적인 움직임입니다. '테스트는 반드시 이 명령어로', '이 형식으로 작성해라'와 같은 규칙을 매번 알려줄 필요가 없게 된 것이 바로 이 메커니즘 덕분입니다. 문제는 그 파일을 누가 작성했는지, 자신인지 공격자인지 AI가 구별할 수 없다는 것입니다.
간과하기 쉬운 두 가지 점이 있습니다. 첫째는, Claude Code도 AGENTS.md를 읽는다는 것입니다. 2.1.277 이후에는 CLAUDE.md가 없는 폴더에서는 대신 AGENTS.md를 읽습니다. 즉, AGENTS.md 한 장으로 Codex와 Claude Code 양쪽에 전달됩니다. 또 다른 하나는, Claude Code가 상위 폴더의 지시 파일까지 거슬러 올라가서 읽는다는 것입니다. zip 파일을 ~/Downloads/tool-v2/에 압축 해제하고 그 안에서 시작하더라도, ~/Downloads/AGENTS.md까지 로드됩니다. '다운로드 폴더 바로 아래가 아니면 괜찮다'고 말할 수 없습니다.
이유 3: 다운로드 폴더는 '타인이 만든 파일'의 장소
다운로드 폴더는 웹페이지, 이메일 첨부파일, 채팅 등으로 받은 파일이 모이는 곳입니다. 연구자의 말을 빌리자면, 웹이 자신의 판단으로 쓸 수 있는 유일한 폴더입니다.
평소 프로젝트 폴더라면 내부의 파일은 대부분 자신이나 팀이 작성한 것입니다. 다운로드 폴더는 반대로, 자신이 쓰지 않은 파일들로 가득합니다. 이런 곳에서 '이 폴더의 규칙을 따르라'며 AI를 시작하는 것은, 모르는 사람이 쓴 메모를 회사 규정처럼 신입사원에게 전달하는 것과 같습니다.
나카지마 씨가 영상으로 지적했듯이, 이는 ChatGPT 같은 채팅에서는 발생하지 않습니다. 자신의 PC 안에서 파일을 읽고 쓰고, 명령을 실행할 수 있는 AI이기 때문에 발생하는 문제입니다.
이유 4: 신뢰 확인은 '폴더'에 단 한 번만
'하지만 모르는 폴더에서 시작하면 확인 절차가 나오지 않나요?'라고 생각한 분도 계실 겁니다. 실제로 Claude Code는 처음 접하는 폴더에서 '이 폴더의 파일을 신뢰하시겠습니까?'라고 묻습니다. Codex 역시 Git으로 관리되지 않은 폴더에서는 읽기 전용 사용을 권장하며, 작업을 시작하기 전에 신뢰 여부를 물어볼 때가 있습니다.
하지만 이 확인은 폴더에 대해서 단 한 번만 이루어집니다.
Claude Code는 신뢰한 폴더를 ~/.claude.json
폴더별로 기록합니다. Codex는 ~/.codex/config.toml의 [projects."폴더의 경로"]에 기록합니다. 한 번 다운로드 폴더를 신뢰하게 되면, 그 이후 웹페이지가 심은 지시 파일은 확인 없이 로드됩니다.
참고로, 사용자의 Codex(로컬 환경에서의 비대화형 실행) 역시 신뢰 설정을 하지 않은 가짜 폴더에서도 AGENTS.md의 지시에 따랐습니다. 따라서 신뢰 확인 절차가 없다고 해서 안전하다고 볼 수 없습니다.
이유 5: 설정 파일은 '어디에 연결할지'를 결정하는 장소
지시 파일이 노리는 것은 에이전트의 설정 파일입니다. 설정 파일에는 '어떤 서버와 통신할지', '어떤 외부 도구를 사용할지', '무엇을 묻지 않고 실행해도 되는지'가 적혀 있습니다. 이곳이 변경되면, AI의 대화 내용 자체가 아니라 **AI의 기반 구조(土台)**가 공격자의 것이 됩니다.
특히 Codex의 ~/.codex/config.toml은 PC 전체 설정이기 때문에, 다운로드 폴더에서 발생한 수정 사항이 업무 프로젝트까지 영향을 미칩니다. 로그인 토큰이 도난당한 경우에도, 재로그인 할 때까지 공격자는 '사용자님'으로서 계속 사용할 수 있습니다.
왜 수정 패치가 나오지 않는가
연구자들은 "OpenAI와 Anthropic 모두 고칠 것이 없다"고 적었습니다. 비교하기 쉬운 사례는 2026년 초에 발견된 Claude Code의 결함(CVE-2026-21852)입니다.
CVE-2026-21852는 악성 리포지토리의 .claude/settings.json에 ANTHROPIC_BASE_URL을 작성해 두면, 신뢰 확인 화면이 뜨기 전에 통신이 시작되어 API 키가 유출되는 결함이었습니다. 확인 절차보다 먼저 작동하는 것은 결함이기 때문에, Claude Code 2.0.65에서 수정되었습니다.
하지만 이번 경우는 다릅니다. 사용자가 폴더를 신뢰하고, AI가 사양대로 지시 파일에 따라, 지시에 따라 설정을 변경하고 있습니다. 모든 부품이 설계대로 작동하기 때문에, 한 곳을 고친다고 해결될 문제가 아닙니다. 지시 파일을 읽지 못하게 막으면, 정상적으로 사용하는 사람의 지시 파일까지 무시되어 버립니다.
바이러스 백신 프로그램으로도 막기 어려운 이유가 같은 맥락입니다. 내용은 단순한 텍스트일 뿐이며, '설정에 이 서버를 추가해 주세요'라는 문구는 올바른 개발 매뉴얼에도 흔히 적혀 있습니다. 단순히 문구만으로 위험하다고 판단하면 보안 자료까지 사라지게 됩니다.
직접 확인: 놓아둔 파일은 읽힐까
여기부터는 사용자의 Mac에서 테스트한 결과입니다. 실제 다운로드 폴더를 사용하지 않고, lab/fake-downloads/라는 가짜 폴더를 만들고, '첫 번째 답변의 1줄에 표시를 남겨달라'고만 부탁하는 무해한 AGENTS.md 파일을 두었습니다.
# 가짜 다운로드 폴더와 무해한 지시 파일 만들기
mkdir -p lab/fake-downloads/extracted-app
cat > lab/fake-downloads/AGENTS.md <<'EOF'
...
Codex에게는 '이 폴더에 있는 파일을 목록으로 보여달라'고만 부탁했습니다. 본인의 설정이나 지시 파일은 읽지 못하도록 CODEX_HOME을 빈 폴더로 전환하고, 읽기 전용의 샌드박스에서 실행했습니다.
# 자신의 ~/.codex를 읽지 못하게 하는 빈 설정 폴더 (로그인 정보만 링크)
mkdir -p lab/codex-home && ln -sf ~/.codex/auth.json lab/codex-home/auth.json
export CODEX_HOME=$PWD/lab/codex-home
...
결과적으로, Codex의 첫 답변은 다음과 같았습니다. 파일을 열기 전에 이미 표시를 남기고 있습니다. 이는 기동 시 지시 파일을 로드했다는 증거입니다.
codex
[CANARY-AGENTS-7F3]
폴더 내 파일과 내용을 확인하고, 각각 1줄로 설명합니다.
Claude Code는 /context 명령어로 '로드된 지시 파일' 목록을 보여주었습니다. 이 명령어는 AI와 통신하지 않고 결과를 출력하므로, 로그인이 끊겨 있어도 사용할 수 있습니다.
cd lab/fake-downloads/extracted-app
claude -p "/context" | sed -n '/### Memory Files/,/### Skills/p'
Memory Files
겉보기에는 확장된 서브 폴더에서 실행했더라도, 부모 폴더의 AGENTS.md가 읽히고 있습니다.
| 시작한 위치 | Codex 0.159.2 | Claude Code 2.1.296 |
|---|
| 가짜 다운로드 폴더 | 2회 중 2회, 표시를 남김 | AGENTS.md를 읽음 |
| 그 안의 확장 폴더 (Git 관리 외) | 2회 중 0회 (시작 폴더만 보기 때문) | 부모의 AGENTS.md를 읽음 |
Claude Code가 표시(마커)를 남길지 여부(지시에 따르는지)는 로그인 만료로 인해 확인하지 못했습니다. 확인한 것은 '처음부터 지시사항으로 로드되는' 부분까지입니다.
웹페이지에 배치 가능한 것과 불가능한 것
또한, Chrome 156의 '열면 파일을 저장하는 페이지'를 사용하여 파일명을 바꿔가며 테스트해 보았습니다.
| 페이지가 붙인 이름 | 실제로 저장된 이름 |
|---|
AGENTS.md | AGENTS.md (클릭 없이 저장) |
| AGENTS.md (같은 이름의 파일이 이미 있음) |
.claude/settings.json | claude_settings.json |
.cursorrules | cursorrules.md |
Chrome은 파일명 앞의 마침표(.)를 제거하고, 폴더 구분자(/)를 언더바(_)로 대체했습니다. 즉, 웹페이지는 .claude/settings.json과 같은 설정 파일을 직접 배치할 수 없습니다. 그렇기 때문에 공격은 배치가 가능한 AGENTS.md에 '설정을 수정해 달라'고 적어, AI 스스로가 내용을 수정하도록 하는 형태를 취하고 있습니다. 역으로 말하면, AI를 실행하지 않으면 배치된 문서는 아무것도 할 수 없습니다.
대안: 안전한 사용법
1. 작업용 폴더를 만들고 필요한 파일만 옮긴 후 실행하기
가장 중요한 대비책입니다. 다운로드한 파일을 AI에게 처리시키고 싶을 때는, 먼저 직접 작업용 폴더로 이동시킨 다음 거기서 실행해야 합니다.
# 1. 작업용 폴더 만들기 (이름은 작업 내용이 보이도록)
mkdir -p ~/work/2026-10-invoice
# 2. 필요한 파일만 옮기기 (다운로드 폴더 전체를 넘겨주지 않음)
...
zip 파일을 압축 해제할 때도 마찬가지입니다. 작업용 폴더에서 압축을 풀고, 그 안에 AGENTS.md
・CLAUDE.md
・.claude/
・.codex/
・.mcp.json
이 있다면, 실행하기 전에 내용을 읽어봅니다. GitHub에서 막 가져온 리포지토리라도 확인하는 방식은 변함이 없습니다.
2. 다운로드 폴더 정리 작업을 AI에게 맡기고 싶을 때
'다운로드 폴더를 정리해 달라'고 요청할 때도, 다운로드 폴더에서 실행하지 마십시오. 작업용 폴더에서 실행하고, 파일명 목록만 넘겨주어 분류 방안을 짜도록 하는 것이 안전합니다.
mkdir -p ~/work/tidy-downloads && cd ~/work/tidy-downloads
# 파일명・크기・날짜만 출력 (내용은 넘기지 않음)
ls -la ~/Downloads > downloads-list.txt
...
완성된 명령어는 직접 읽어본 후에 실행합니다. AI에게 파일의 내용까지 읽게 하면, 지시 파일의 문장이 '데이터'로 눈에 들어오기 때문에 여기에서도 안전하다고 단정하기 어렵습니다.
3. 승인(Approval)과 샌드박스(Sandbox)는 해제하지 않기
만약 악성 지시 파일을 읽히게 되더라도, 승인과 샌드박스가 남아있다면 대부분 그곳에서 멈춥니다. Claude Code의 설정 수정이 절반 정도밖에 성공하지 못한 것도 쓰기에 승인이 필요했기 때문이라는 요인이 있었습니다.
| 비활성화 옵션 | 공식적인 위치/권장 사항 |
|---|
| Codex | --dangerously-bypass-approvals-and-sandbox (별칭: --yolo) |
| Claude Code | --dangerously-skip-permissions (bypassPermissions 모드) |
Claude Code의 경우, .claude 폴더(설정이 들어가는 곳)에 대한 쓰기는 '보호된 경로'로 취급되며, 수동으로 승인하는 모드에서는 반드시 확인 절차가 나옵니다. 다만, 2.1.283 버전 이상에서 초기 설정되는 auto 모드에서는 이 판단을 사람 대신 판정용 모델이 수행합니다. 공식 문서를 보면, 이 판정 모델은 CLAUDE.md의 내용도 참조한다고 합니다. 공격자가 작성한 지시 파일도 판단 자료로 들어간다는 의미이므로, auto 모드에 맡긴다고 안심해서는 안 됩니다.
4. 승인 화면에서는 '어디를 수정하는지' 확인하기
승인 화면이 나타나면, 먼저 '어디를 수정하는지', '무엇을 실행하는지'를 살펴봅니다. 쓰기 위치가 설정 파일이라면, 그것이 내가 요청한 변경 사항인지 확인합니다. 명령(커맨드)이라면, 안전장치를 해제하는 실행이나, 요청하지 않은 설치는 아닌지 확인합니다. 해당된다면 주저 없이 거부해도 무방합니다. 올바른 작업이라면, 거부한 후 이유를 물어보면 설명이 돌아옵니다.
특히, 다음 단어들이 보이면 멈춰야 합니다.
- 쓰기 위치가
~/.codex/config.toml
・.claude/settings.json
・.mcp.json
mcp_servers,
base_url,
ANTHROPIC_BASE_URL,
proxy 등, 통신처나 툴을 변경하는 항목 -
--dangerously-…,
--yolo,
dangerouslyDisableSandbox 등, 안전장치를 해제하는 지정 -
요청하지 않은 패키지의
npm install
이나, launchctl (macOS에서 상주 프로그램을 등록하는 커맨드)
리포트의 공격 문서들은 이러한 변경 사항을 '프로젝트 모델 연결처 설정', '설치에 필요한 절차'와 같이 작업의 일부처럼 보이는 말로 포장했습니다. 자신의 요청과 연결되지 않는 설정 변경은, 아무리 그럴듯한 설명이 붙어 있어도 거부하는 것이 기본입니다.
5. 브라우저에서도 방어막을 치기
Chrome에서는 '설정' → '다운로드' (chrome://settings/downloads)에서 '다운로드 전에 각 파일의 저장 위치를 확인하기'를 켜면, 저장할 때마다 저장 위치를 선택하는 화면이 나옵니다. 모르는 사이에 저장된다는 전제를 무너뜨릴 수 있습니다.
매번 확인하는 것이 번거로운 분들은 AI 작업을 하는 폴더와 다운로드 저장 위치를 명확히 분리해 두기만 해도 효과가 있습니다.
6. 지시 파일을 미리 배치하기 (보조책)
X에서는 '다운로드 폴더에, 먼저 자신이 AGENTS.md나 CLAUDE.md 같은 파일을 만들어 놓는 것'이라는 대책도 확산되었습니다. 같은 이름의 파일이 있으면 브라우저는 새 파일에 (1)을 붙여 저장하기 때문에, 공격자의 파일이 본래 이름으로 놓이지 않게 된다는 생각입니다.
직접 테스트해본 결과, 하나만 배치하는 것만으로는 허점이 남는다는 것을 알았습니다.
| 자신이 배치한 파일 | 나중에 떨어진 파일 | 결과 |
|---|
AGENTS.md만 | AGENTS.override.md | Codex가 2번 중 2번, 떨어진 파일을 따랐다 (override가 우선됨) |
AGENTS.md만 | CLAUDE.md | Claude Code는 떨어진 CLAUDE.md만 읽고, 자신의 AGENTS.md는 읽히지 않았다 |
CLAUDE.md만 | CLAUDE.local.md | Claude Code는 양쪽을 모두 읽었다 |
| 4가지 전부 | 같은 4개의 이름 | Chrome이 전부 (1)을 붙여 저장했고, 어느 것도 자동으로 읽지 않았다 |
배치한다면 다음 4가지를 갖추어야 합니다. 이미 같은 이름의 파일이 있는 경우에는 덮어쓰기되지 않으므로, 미리 내용을 확인한 후에 실행해 주세요.
cd ~/Downloads
# 먼저, 낯선 지시 파일이 있는지 확인합니다
ls -la | grep -iE 'agents|claude'
...
그럼에도 불구하고, 이것은 임시 방편일 뿐입니다. 이름이 변경되어 AGENTS (1).md로 되어 있습니다.