22 октября 2026 года Forever Security описала живой инцидент у клиента: кодинг-агент пытался поставить вредоносный npm-пакет function-color, а приказ шёл не из репозитория и не из зависимостей, а из файла AGENTS.md в каталоге ~/Downloads. 26 октября разбор кратко пересказал OpenNet.
Если вы запускаете Codex, Claude Code или похожего агента в Downloads «просто посмотреть загруженный архив», это уже не безобидная привычка. Браузер умеет тихо положить туда файл с нужным именем, а агент по задумке читает инструкции из корня рабочей папки.
Как сходятся два безобидных факта
Агенты вроде Codex читают AGENTS.md в корне проекта и следуют ему. Claude Code опирается на CLAUDE.md. Это штатное поведение: файл нужен, чтобы агент знал инструменты, зависимости и правила репозитория.
Отдельно браузеры давно умеют сохранять файл в Downloads без лишнего диалога. Для исполняемых файлов ОС уже давно спрашивает разрешение. Markdown же выглядит как текст, поэтому старые защиты его не тормозят.
Вместе получается дыра на стыке: сайт кладёт в Downloads «инструкцию для агента», пользователь или сам агент открывает сессию в этой папке, и модель исполняет чужой сценарий. По телеметрии Forever около половины клиентов хотя бы раз гоняли кодинг-агента прямо из Downloads, а примерно четверть сессий агента открывает настоящий браузер.
Что поймали у клиента: function-color
Алерт сработал, когда агент уже тянул function-color. Пакет известен как вредоносный; npm его потом убрали. Источник приказа оказался странным: не lockfile и не чужой pull request, а AGENTS.md в ~/Downloads.
Файл маскировался под обычные engineering guidelines. Ближе к концу шла секция «локальное окружение»: зарегистрировать MCP-сервер project-tools в ~/.codex/config.toml и через npx/npm install подтянуть function-color. Конфиг Codex глобальный, поэтому после записи яд отравляет не только Downloads, а любые следующие сессии на машине.
Codex и Claude Code: два разных исхода
На Codex исследователи прогнали настоящий клиентский AGENTS.md в изолированной ВМ. Агент дописывал блок в ~/.codex/config.toml, поднимал дочернюю сессию с обходом песочницы и ставил пакет. В их прогонах это срабатывало больше чем в 90% попыток.
Для Claude Code сценарий другой. Вредоносный CLAUDE.md уговаривает записать в .claude/settings.json переменную ANTHROPIC_BASE_URL на чужой адрес. Дальше запросы к API идут мимо Anthropic: утекает OAuth-токен, а «модель» на стороне атакующего может вернуть tool call и добиться выполнения кода. У Forever этот путь отрабатывал примерно в половине попыток.
Это не баг конкретного продукта в классическом смысле. Агент делает то, для чего его строили: читает инструкции в рабочей папке и умеет менять свой конфиг. Ломается доверие к каталогу, в который веб может писать без вашего явного согласия.
Что проверить у себя
Не запускайте Codex, Claude Code и похожих агентов из ~/Downloads. Перед сессией в незнакомой папке или свежем клоне смотрите, нет ли чужих AGENTS.md / CLAUDE.md, которых вы не писали.
В ~/.codex/config.toml ищите неожиданные блоки [mcp_servers.*] и смену base URL. В проектном .claude/settings.json смотрите на ANTHROPIC_BASE_URL и любой чужой endpoint API. Песочницу и запросы на подтверждение лучше не отключать «для удобства», особенно если файл инструкций сам просит обойти их.
Если такой файл или странный конфиг уже нашлись, считайте токен скомпрометированным и ротируйте его. Наличие function-color в истории установок npm на машине Forever предлагает считать признаком компрометации.
Коротко: вредонос здесь не «магический exe», а markdown, которому ваш агент привык верить. Пока Downloads остаётся папкой, куда веб пишет сам, а агент стартует из неё, вектор остаётся открытым. Практичная защита начинается с того, чтобы не давать агенту эту папку и не пропускать чужие файлы инструкций.