Назад

2026/10/29

Вредоносные файлы AGENTS.md и CLAUDE.md: как папка «Загрузки» может перехватить управление ИИ-агентами для программирования

Подброшенный в «Загрузки» файл инструкций пытался заставить ИИ-агента установить вредоносный npm-пакет. Что произошло и как защититься.

Главное

  • Подброшенный файл AGENTS.md в папке ~/Downloads пользователя велел ИИ-агенту для программирования установить заведомо вредоносный npm-пакет. Попытку остановили до того, как был выполнен какой-либо код.
  • В лабораторных тестах OpenAI Codex выполнял вредоносный файл инструкций более чем в 90% попыток. Claude Code — примерно в половине случаев.
  • Это не ошибка, которую можно исправить патчем. Агенты доверяют файлам инструкций в папке, где они запущены, а браузеры могут записывать файлы в «Загрузки».
  • Основные меры защиты просты: никогда не запускайте агента в «Загрузках», читайте файлы инструкций, которые писали не вы, проверяйте конфигурацию агента на незнакомые конечные точки и не отключайте подтверждения и песочницу.

Что произошло

22 октября 2026 года компания по информационной безопасности Forever Security опубликовала статью «Markdown Is the New Executable» авторства Гала Вайцмана и Омера Самета. В ней описан реальный инцидент на компьютере клиента. ИИ-агент для программирования работал в папке пользователя ~/Downloads, и файл AGENTS.md в этой папке велел ему установить function-color — вредоносный npm-пакет. Forever остановила агента до установки пакета и до запуска какого-либо вредоносного кода.

Как файл попал в папку «Загрузки», неизвестно. Forever сообщает, что не смогла это установить, и публикации BleepingComputer и The Hacker News повторяют это. Затем Forever подготовила лабораторные демонстрации, чтобы показать, как веб-страница могла бы подбросить такой файл и что агент сделал бы с ним.

Сам пакет не новый. Checkmarx и CloudSEK связывают function-color с npm-кампанией MALFEX. Пакет представляет собой тонкую обёртку, которая подтягивает function-flag. Установочный скрипт того пакета загружает с удалённого сервера и запускает следующую полезную нагрузку. Кампания нацелена на Windows, и, по данным Checkmarx, её оператор активен с августа 2023 года. Когда мы проверили реестр npm 29 октября 2026 года, пакеты function-color, function-flag и cdn-img-fetch уже были заменены заглушкой npm 0.0.1-security.

Почему Markdown-файл может управлять агентом

Аргумент Forever строится на двух обычных особенностях поведения, которые вместе становятся опасными.

  1. Агенты загружают файлы инструкций автоматически. Агенты для программирования читают файлы инструкций проекта при запуске и воспринимают их как указания пользователя. Codex читает AGENTS.md от корня проекта вниз до текущей папки. Если корня проекта нет, он читает только текущую папку. Claude Code загружает CLAUDE.md из папки запуска и из каждой папки выше неё. Если CLAUDE.md нет, он читает вместо него AGENTS.md.
  2. Веб может записывать в «Загрузки». По данным BleepingComputer, Chrome, Edge и Firefox по умолчанию сохраняют файлы в «Загрузки», не спрашивая, куда их поместить. Страница может задать имя и содержимое файла. Markdown-файл не является программой, поэтому проверки операционной системы для загруженных исполняемых файлов не считают его опасным.

Вместе это означает, что веб-страница может оставить файл, который агент позже прочитает как инструкции. Агента не нужно «обманывать» в привычном смысле: он делает то, для чего создан. Forever также отмечает, что некоторые агенты сами просматривают веб. В таком случае человек может вообще не увидеть, что произошла загрузка.

Та же логика применима не только к «Загрузкам». Под угрозой любая папка, куда может попасть недоверенное содержимое: только что клонированный репозиторий, распакованный архив или общая папка. В случае Claude Code проект, распакованный в подпапку «Загрузок», также подхватывает CLAUDE.md, лежащий в самих «Загрузках», потому что файлы из родительских папок тоже загружаются.

Что показало исследование

Forever протестировала двух агентов. В большинстве запусков использовалась безобидная замена полезной нагрузки (открытие калькулятора). Настоящий вредоносный пакет запускали один раз, внутри изолированной виртуальной машины.

OpenAI Codex

Исследователи повторно использовали настоящий AGENTS.md с компьютера клиента. Файл велел Codex добавить запись MCP-сервера в общую для всей машины конфигурацию ~/.codex/config.toml. Эта запись при запуске выполняла команду, которая устанавливала npm-пакет. Поскольку конфигурация глобальная, изменение сохраняется во всех последующих сеансах Codex на этой машине, а не только в том, который прочитал файл. По данным Forever, для атаки потребовалось несколько обходных приёмов: длинный скучный стиль документа, дочерний сеанс, запущенный с флагами обхода песочницы, и способ запуска, позволяющий избежать тайм-аута Codex при старте. Тем не менее Codex выполнял полезную нагрузку более чем в 90% попыток.

Claude Code

Для Claude Code исследователи написали собственный CLAUDE.md, оформленный как заметки по настройке внутреннего API-шлюза. Он просил Claude записать параметр ANTHROPIC_BASE_URL в файл проекта .claude/settings.json, направив API-трафик на сервер под контролем исследователей. По словам Forever, это приводит к утечке OAuth-токена сеанса. Кроме того, сервер атакующего может выдавать себя за модель и возвращать вызовы инструментов, включая shell-команды с отключённой песочницей. Forever продемонстрировала кражу токена (его повторное использование, чтобы действовать от имени жертвы) и выполнение кода при следующем запуске. Также был показан путь, при котором атака срабатывала в том же сеансе за счёт запуска субагента.

Это работало менее надёжно. Claude Code запрашивает подтверждение перед записью в файлы настроек и часто отказывался вносить подозрительное изменение. Forever сообщает об успехе примерно в половине случаев и примерно в одной из пяти попыток для пути с субагентом в том же сеансе.

Что показано не было

  • Forever не установила, как настоящий файл попал в папку «Загрузки» клиента. Путь через веб-загрузку — продемонстрированная возможность, а не подтверждённая причина.
  • Тестировались только Codex и Claude Code. Forever утверждает, что другие агенты, загружающие файлы инструкций, уязвимы так же, но их не проверяла.
  • В статьях не названы конкретные версии инструментов и не приводятся заявления производителей. Позиция Forever: «здесь нечего исправлять ни OpenAI, ни Anthropic» — агенты работают так, как задумано.

Почему это важно

Файлы инструкций легко упустить из виду, потому что они выглядят как документация. На практике они действуют как конфигурация, а через агента с доступом к оболочке — как код. Три обстоятельства делают риск практическим:

  • Агентов часто запускают в «Загрузках». Люди используют агентов, чтобы разобрать файлы или поработать с только что скачанным. Forever сообщила BleepingComputer, что сотни её клиентов запускают агентов для программирования из «Загрузок»; там было начато более 1 300 сеансов Claude Code.
  • Последствия переживают сеанс. Изменённая глобальная конфигурация, новый 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, могут централизованно задавать настройки с помощью управляемых настроек (managed settings). Они также могут использовать хуки ConfigChange, чтобы отслеживать или блокировать изменения настроек во время сеанса.

4. Не отключайте защитные механизмы

  • Оставляйте включёнными запросы подтверждения и песочницу. Вне одноразовой среды избегайте флагов, которые их обходят, например --dangerously-bypass-approvals-and-sandbox в Codex или --dangerously-skip-permissions в Claude Code.
  • Внимательно читайте запросы подтверждения для файлов настроек и конфигурации. В тесте Claude Code именно этап подтверждения останавливал атаку примерно в половине случаев.
  • Читайте диалог доверия к рабочей папке в Claude Code, прежде чем подтверждать его для новой папки.
  • Работайте с недоверенными репозиториями и загрузками внутри виртуальной машины или dev-контейнера, а не на основной рабочей станции.
  • Для npm заблокируйте известные пакеты MALFEX и рассмотрите ignore-scripts для установок, которые вы не проверили.

5. Если вы нашли подброшенный файл

  1. Не запускайте агента в этой папке. Сохраните копию файла для расследования, затем удалите его из папки.
  2. Проверьте перечисленные выше файлы конфигурации агента и удалите всё, что вы не добавляли.
  3. Исходите из того, что токен сеанса агента мог утечь. Выйдите из системы и войдите снова, а также смените все API-ключи, к которым агент имел доступ.
  4. Поищите function-color и function-flag в lock-файлах и папках node_modules. Если любой из них был установлен, считайте машину скомпрометированной и действуйте по своему процессу реагирования на инциденты.

Общая картина

Заголовок статьи Forever — «Markdown Is the New Executable». Это полезный взгляд на любой файл, который агент читает как инструкции. Файлы инструкций определяют, что агент с доступом к оболочке сделает дальше, поэтому они заслуживают того же внимания, что и скрипты: знайте, откуда они взялись, проверяйте изменения в них и не держите их в папках, куда может писать кто угодно из интернета. Описанные меры — это в основном привычки, а не патчи, и их внедрение обходится недорого.

Источники