뒤로
2026/10/29
악성 AGENTS.md와 CLAUDE.md 파일: Downloads 폴더가 AI 코딩 에이전트를 탈취하는 방식
Downloads 폴더에 심어진 지시 파일이 AI 코딩 에이전트에게 npm 악성코드 설치를 시도하게 했습니다. 사건 경위, 연구 결과, 방어 방법을 정리합니다.
핵심 요약
- 사용자의
~/Downloads폴더에 심어진AGENTS.md파일이 AI 코딩 에이전트에게 알려진 악성 npm 패키지를 설치하라고 지시했습니다. 이 시도는 코드가 실행되기 전에 차단되었습니다. - 실험 환경 테스트에서 OpenAI Codex는 90% 이상의 시도에서 악성 지시 파일을 따랐습니다. Claude Code는 약 절반의 경우에 따랐습니다.
- 이는 패치로 고칠 수 있는 버그가 아닙니다. 에이전트는 자신이 시작된 폴더의 지시 파일을 신뢰하고, 브라우저는 Downloads에 파일을 쓸 수 있기 때문입니다.
- 주요 방어책은 간단합니다. Downloads에서 에이전트를 시작하지 말고, 직접 작성하지 않은 지시 파일은 읽어 보고, 에이전트 설정에 직접 지정하지 않은 엔드포인트가 있는지 확인하고, 승인과 샌드박스를 켜 두십시오.
무슨 일이 있었나
2026년 10월 22일, 보안 기업 Forever Security는 Gal Weizman과 Omer Samet이 작성한 “Markdown Is the New Executable”을 공개했습니다. 이 글은 이 회사 고객의 컴퓨터에서 실제로 발생한 사고를 설명합니다. AI 코딩 에이전트가 사용자의 ~/Downloads 폴더에서 작업하고 있었는데, 그 폴더에 있던 AGENTS.md 파일이 악성 npm 패키지인 function-color를 설치하라고 지시했습니다. Forever는 패키지가 설치되기 전, 그리고 악성 코드가 실행되기 전에 에이전트를 중단시켰습니다.
이 파일이 어떻게 Downloads 폴더에 들어갔는지는 아무도 모릅니다. Forever는 이를 밝혀내지 못했다고 밝혔고, BleepingComputer와 The Hacker News의 보도도 같은 점을 전하고 있습니다. 이후 Forever는 웹 페이지가 이런 파일을 어떻게 심을 수 있는지, 그리고 에이전트가 그 파일로 무엇을 하는지 보여 주는 실험 시연을 만들었습니다.
패키지 자체는 새로운 것이 아닙니다. Checkmarx와 CloudSEK는 function-color를 MALFEX npm 캠페인과 연결 짓고 있습니다. 이 패키지는 function-flag를 불러오는 얇은 래퍼입니다. 그리고 function-flag의 설치 스크립트가 원격 서버에서 추가 페이로드를 내려받아 실행합니다. 이 캠페인은 Windows를 노리며, Checkmarx에 따르면 운영자는 2023년 8월부터 활동해 왔습니다. 2026년 10월 29일 npm 레지스트리를 확인했을 때, function-color, function-flag, cdn-img-fetch는 모두 npm의 0.0.1-security 플레이스홀더로 교체되어 있었습니다.
Markdown 파일이 에이전트를 조종할 수 있는 이유
Forever의 주장은 각각은 평범하지만 함께 있으면 위험해지는 두 가지 동작에 기반합니다.
- 에이전트는 지시 파일을 자동으로 불러옵니다. 코딩 에이전트는 시작할 때 프로젝트 지시 파일을 읽고 이를 사용자의 안내로 취급합니다. Codex는 프로젝트 루트부터 현재 폴더까지의
AGENTS.md를 읽습니다. 프로젝트 루트가 없으면 현재 폴더의 파일만 읽습니다. Claude Code는 시작한 폴더와 그 위의 모든 상위 폴더에서CLAUDE.md를 불러옵니다.CLAUDE.md가 없으면 대신AGENTS.md를 읽습니다. - 웹은 Downloads에 파일을 쓸 수 있습니다. BleepingComputer에 따르면 Chrome, Edge, Firefox는 기본적으로 저장 위치를 묻지 않고 파일을 Downloads에 저장합니다. 파일 이름과 내용은 웹 페이지가 정할 수 있습니다. Markdown 파일은 프로그램이 아니기 때문에, 다운로드한 실행 파일에 대한 운영 체제의 검사도 이를 위험한 파일로 보지 않습니다.
이 두 가지가 합쳐지면, 웹 페이지가 떨어뜨린 파일을 에이전트가 나중에 지시로 읽게 됩니다. 에이전트가 일반적인 의미에서 “속을” 필요도 없습니다. 원래 설계된 대로 동작할 뿐입니다. Forever는 또한 일부 에이전트가 스스로 웹을 탐색한다는 점을 지적합니다. 이 경우 다운로드가 일어나는 것을 아무도 보지 못할 수 있습니다.
같은 논리는 Downloads 밖에도 적용됩니다. 신뢰할 수 없는 콘텐츠가 들어올 수 있는 모든 폴더가 대상이 될 수 있습니다. 방금 클론한 저장소, 압축을 푼 아카이브, 공유 폴더 등이 그렇습니다. Claude Code의 경우, Downloads의 하위 폴더에 압축을 푼 프로젝트도 Downloads 자체에 있는 CLAUDE.md를 불러옵니다. 상위 폴더의 파일도 읽기 때문입니다.
연구에서 입증된 내용
Forever는 두 에이전트를 테스트했습니다. 대부분의 실행에서는 무해한 대체 페이로드(계산기 실행)를 사용했습니다. 실제 악성 패키지는 격리된 가상 머신 안에서 한 번만 실행했습니다.
OpenAI Codex
연구진은 고객 컴퓨터에서 발견된 실제 AGENTS.md를 그대로 사용했습니다. 이 파일은 Codex에게 머신 전체에 적용되는 설정 파일 ~/.codex/config.toml에 MCP 서버 항목을 추가하라고 지시했습니다. 그 항목은 시작 시 명령을 실행해 npm 패키지를 설치하는 내용이었습니다. 설정이 전역이기 때문에, 이 변경은 파일을 읽은 세션뿐 아니라 그 머신에서 이후에 실행되는 모든 Codex 세션에 남습니다. Forever에 따르면 공격에는 몇 가지 우회 방법이 필요했습니다. 길고 지루한 문서 형식, 샌드박스 우회 플래그로 시작한 하위 세션, 그리고 Codex의 시작 시간 제한을 피하는 실행 방식입니다. 그럼에도 Codex는 90% 이상의 시도에서 페이로드를 실행했습니다.
Claude Code
Claude Code의 경우 연구진은 내부 API 게이트웨이 설정 메모처럼 꾸민 자체 CLAUDE.md를 작성했습니다. 이 파일은 Claude에게 프로젝트의 .claude/settings.json에 ANTHROPIC_BASE_URL 설정을 써서 API 트래픽을 연구진이 통제하는 서버로 보내도록 요청했습니다. Forever에 따르면 이로 인해 세션의 OAuth 토큰이 유출됩니다. 또한 공격자의 서버가 모델로 위장해 샌드박스가 비활성화된 셸 명령을 포함한 도구 호출을 되돌려 보낼 수 있게 됩니다. Forever는 토큰 탈취(토큰을 재사용해 피해자로 행세하는 것)와 다음 실행 시의 코드 실행을 시연했습니다. 또한 하위 에이전트를 시작해 같은 세션 안에서 공격을 일으키는 경로도 보여 주었습니다.
이 방법은 신뢰성이 더 낮았습니다. Claude Code는 설정 파일에 쓰기 전에 승인을 요청하며, 의심스러운 변경을 거부하는 경우가 많았습니다. Forever는 성공률이 약 절반이었고, 같은 세션의 하위 에이전트 경로는 약 다섯 번에 한 번이었다고 보고했습니다.
입증되지 않은 내용
- Forever는 실제 파일이 고객의 Downloads 폴더에 어떻게 도달했는지 밝히지 못했습니다. 웹 다운로드 경로는 시연된 가능성일 뿐, 확인된 원인이 아닙니다.
- 테스트한 것은 Codex와 Claude Code뿐입니다. Forever는 지시 파일을 불러오는 다른 에이전트도 같은 방식으로 노출된다고 주장하지만, 이를 테스트하지는 않았습니다.
- 관련 기사들은 구체적인 도구 버전을 밝히지 않았고, 벤더의 입장도 전하지 않았습니다. Forever의 입장은 “OpenAI나 Anthropic이 패치할 것은 없다”는 것, 즉 에이전트가 설계대로 동작하고 있다는 것입니다.
왜 중요한가
지시 파일은 문서처럼 보이기 때문에 간과하기 쉽습니다. 하지만 실제로는 설정처럼 동작하며, 셸 접근 권한이 있는 에이전트를 통해 코드처럼 동작할 수도 있습니다. 다음 세 가지가 이 위험을 현실적인 것으로 만듭니다.
- 에이전트는 Downloads에서 시작되는 경우가 많습니다. 사람들은 파일을 정리하거나 방금 내려받은 것을 다루기 위해 에이전트를 사용합니다. Forever는 BleepingComputer에 수백 곳의 고객이 Downloads에서 코딩 에이전트를 실행하고 있으며, 그곳에서 시작된 Claude Code 세션이 1,300개가 넘는다고 밝혔습니다.
- 영향은 세션이 끝난 뒤에도 남습니다. 변경된 전역 설정, 새 MCP 서버, 리디렉션된 API 엔드포인트는 원래 파일을 삭제한 뒤에도 계속 작동합니다.
- 노리는 것은 자격 증명입니다. 탈취된 에이전트 세션 토큰은 그대로 쓸 수 있는 로그인 정보입니다. 공격자는 머신에서 코드를 실행하지 않고도 이를 사용할 수 있습니다.
실용적인 방어책
1. 에이전트를 시작할 위치를 정하십시오
- 코딩 에이전트를
~/Downloads나 브라우저, 이메일, 채팅 앱이 파일을 쓰는 폴더에서 시작하지 마십시오. 먼저 작업물을 전용 작업 공간 폴더로 옮기거나 클론하십시오. - 홈 디렉터리에서 에이전트를 시작하는 것도 피하십시오. 특정 프로젝트 폴더에서 시작하십시오. BleepingComputer에 따르면 OpenAI와 Anthropic도 같은 방식을 권장합니다.
- 다운로드할 때마다 저장 위치를 묻도록 브라우저를 설정하는 것도 고려하십시오. 클릭이 한 번 늘지만, 사용자 모르게 이루어지는 다운로드를 막을 수 있습니다.
2. 직접 작성하지 않은 지시 파일을 찾으십시오
신뢰할 수 없는 파일이 들어오는 위치와 홈 폴더를 검색하십시오. Linux와 macOS에서는 다음과 같습니다.
find ~/Downloads ~/Desktop ~ -maxdepth 3 \( -name AGENTS.md -o -name AGENTS.override.md -o -name CLAUDE.md -o -name CLAUDE.local.md \) -print 2>/dev/null | sort -u
Windows에서는 PowerShell에서 다음과 같습니다.
Get-ChildItem $HOME\Downloads, $HOME\Desktop -Recurse -Depth 3 -Force -ErrorAction SilentlyContinue -Include AGENTS.md, AGENTS.override.md, CLAUDE.md, CLAUDE.local.md | Select-Object FullName, LastWriteTime
찾은 파일은 에이전트가 접근하기 전에 모두 읽어 보십시오. 패키지 설치, 서버 추가, API 엔드포인트 변경, 승인 해제를 요구하는 지시는 매우 의심해야 합니다. 또한 모든 세션에 적용되는 개인 지시 파일인 ~/.codex/AGENTS.md와 ~/.claude/CLAUDE.md도 확인하십시오.
정상적인 프로젝트 지시 파일은 프로젝트를 빌드하고 테스트하는 방법을 설명합니다. 에이전트의 전역 설정, API 엔드포인트, 보안 설정을 바꿀 이유가 없습니다. 이런 변경을 요구하는 파일은 악의적인 것으로 간주하십시오.
3. 직접 하지 않은 변경이 있는지 에이전트 설정을 확인하십시오
Forever의 조언에 따라, 예상하지 못한 MCP 서버 블록, 변경된 chatgpt_base_url, 직접 설정하지 않은 ANTHROPIC_BASE_URL 또는 기타 API 엔드포인트가 있는지 찾아보십시오.
grep -nE '^\[mcp_servers|base_url' ~/.codex/config.toml
grep -nE 'BASE_URL|mcpServers' ~/.claude/settings.json .claude/settings.json .claude/settings.local.json .mcp.json 2>/dev/null
Claude Code를 사용하는 팀은 관리형 설정으로 설정을 중앙에서 강제할 수 있습니다. 또한 ConfigChange 훅을 사용해 세션 중 설정 변경을 감사하거나 차단할 수 있습니다.
4. 안전장치를 켜 두십시오
- 승인 프롬프트와 샌드박스를 활성화된 상태로 두십시오. Codex의
--dangerously-bypass-approvals-and-sandbox나 Claude Code의--dangerously-skip-permissions처럼 이를 우회하는 플래그는 일회용 환경이 아니라면 사용하지 마십시오. - 설정 및 구성 파일에 대한 승인 프롬프트는 주의 깊게 읽으십시오. Claude Code 테스트에서 약 절반의 경우 공격을 막은 것은 바로 이 승인 단계였습니다.
- 새 폴더에 대해 Claude Code의 작업 공간 신뢰 대화 상자를 수락하기 전에 내용을 읽으십시오.
- 신뢰할 수 없는 저장소와 다운로드 파일은 주 워크스테이션이 아니라 가상 머신이나 개발 컨테이너 안에서 다루십시오.
- npm에서는 알려진 MALFEX 패키지를 차단하고, 검토하지 않은 설치에는
ignore-scripts사용을 고려하십시오.
5. 심어진 파일을 발견했다면
- 그 폴더에서 에이전트를 시작하지 마십시오. 조사용으로 파일 사본을 보관한 뒤 폴더에서 제거하십시오.
- 위에 나온 에이전트 설정 파일을 확인하고, 직접 추가하지 않은 항목은 모두 제거하십시오.
- 에이전트의 세션 토큰이 유출되었을 수 있다고 가정하십시오. 로그아웃한 뒤 다시 로그인하고, 에이전트가 접근할 수 있었던 API 키는 모두 교체하십시오.
- 잠금 파일과
node_modules폴더에서function-color와function-flag를 검색하십시오. 둘 중 하나라도 설치되어 있었다면 머신이 침해된 것으로 간주하고 사고 대응 절차를 따르십시오.
더 큰 그림
Forever의 글 제목은 “Markdown Is the New Executable(Markdown은 새로운 실행 파일이다)”입니다. 에이전트가 지시로 읽는 모든 파일을 바라보는 유용한 관점입니다. 지시 파일은 셸 접근 권한이 있는 에이전트가 다음에 무엇을 할지 결정하므로, 스크립트와 같은 수준의 주의가 필요합니다. 출처를 파악하고, 변경 사항을 검토하고, 인터넷의 누구나 쓸 수 있는 폴더에 두지 마십시오. 여기서 소개한 대책은 대부분 패치가 아니라 습관이며, 도입하는 데 드는 비용도 적습니다.
참고 자료
- Forever Security, “Markdown Is the New Executable”(2026년 10월 22일), 1차 자료
- BleepingComputer, “AI coding agents hijacked using AGENTS.md file in Downloads folder”(2026년 10월 25일)
- The Hacker News, “Malicious File in Downloads Folder Tries to Trick AI Coding Agent Into Installing Malware”(2026년 10월 26일)
- Checkmarx, MALFEX npm 악성코드 캠페인(2026년 10월 5일)
- CloudSEK, MALFEX 악성 npm postinstall 공급망 캠페인
- OpenAI, Codex AGENTS.md 문서
- Anthropic, Claude Code 메모리(CLAUDE.md) 문서 및 Claude Code 보안 문서
Global
Japan
China
Taiwan
Vietnam
Thailand
Indonesia
Portugal
Spain
France
Germany
Egypt
Russia