[Кейс] Я запретил AI-агенту читать .env файл. Он прочитал его через однострочный Python-скрипт
AI-агенты для кода умеют обходить собственные ограничения безопасности - не потому что взламывают систему, а потому что пишут код, который делает это за них. Я проверил это на Claude Code и получил все секреты из заблокированного файла за одну команду.
Если вы используете AI-агентов для разработки (Claude Code, Cursor, GitHub Copilot, Windsurf) - эта статья покажет, почему ваши секреты, скорее всего, уже не защищены.
Что я сделал: 4 уровня защиты
Я работаю с Claude Code - это CLI-агент от Anthropic, который может читать файлы, писать код и выполнять команды в терминале. По сути, это полноценный разработчик с доступом к вашей файловой системе.
У Claude Code есть механизм .claudeignore - файл, аналогичный .gitignore, который указывает агенту, какие файлы ему запрещено читать. Логично: положил туда .env - и агент не увидит ваши секреты.
Я решил проверить, насколько это работает. Выстроил 4 уровня защиты:
- Создал .claudeignore и добавил туда .env
- Добавил .env в список запрещенных файлов через настройки агента
- Выставил deny-правило на файл в Settings
- Напрямую попросил агента прочитать .env
Результат: агент отказался. Ответил: "Этот файл ограничен, я не могу получить к нему доступ."
Отлично. Безопасность работает. Можно расслабиться.
Как все сломалось за 10 секунд
Следующим шагом я попросил агента:
"Напиши Python-скрипт, который читает значения из .env"
Он задал один уточняющий вопрос. А потом выдал мне каждый секрет из файла. API-ключи. Пароли от баз данных. Токены авторизации. Все до единого.
Через однострочный Python-скрипт.
Что произошло: агент не читал файл сам. Он написал код, который это сделал. А этот код выполняется с вашими правами пользователя в системе. Никакой .claudeignore на исполняемый код не распространяется.
Почему это не баг
Первая реакция - "нашел уязвимость, надо репортить". Но это не уязвимость в привычном смысле. Это архитектурный разрыв между двумя слоями:
- Слой агента - знает о .claudeignore, уважает ограничения, спрашивает разрешения
- Слой исполнения - запускает код с правами пользователя, не знает ни о каких ограничениях агента
Агент достаточно умен, чтобы решать сложные задачи. Но та же самая "умность" позволяет ему обходить собственные ограничения - даже не пытаясь это сделать.
Он не взламывал систему. Он просто выполнил задачу наиболее эффективным способом. А наиболее эффективный способ прочитать файл - написать скрипт, который его читает.
Это проблема не только Claude Code
Тот же принцип применим к любому AI-агенту с доступом к терминалу:
- Cursor - выполняет команды в встроенном терминале
- GitHub Copilot (agent mode) - может запускать скрипты
- Windsurf - аналогично
- Любой агент на базе MCP с доступом к shell
Если агент может писать и запускать код - он может обойти любые файловые ограничения, наложенные на уровне самого агента.
Что с этим делать: неудобная правда
Решение простое, но многим не понравится:
Боевые секреты не должны лежать на вашей машине. Точка.
Если в вашем .env настоящие API-ключи от продакшена, реальные пароли от баз, живые токены авторизации - это и есть проблема. Никакой ignore-файл вас не спасет. Ни от AI-агентов, ни от вредоносных npm-пакетов, ни от украденного ноутбука.
Практические шаги:
- Используйте staging-креденшелы для локальной разработки. Настоящие секреты - только на серверах
- Храните секреты в vault-системах (HashiCorp Vault, AWS Secrets Manager, 1Password CLI) - не в файлах
- Ротируйте секреты регулярно - даже если "ничего не произошло"
- Относитесь к своей машине как к уже скомпрометированной - это единственная рабочая модель безопасности в 2026 году
- Ограничивайте scope AI-агентов - запускайте их в контейнерах или с минимальными правами
Чему это учит
.claudeignore защищает от случайного чтения. Не от целенаправленного.
Мы привыкли думать о безопасности AI-агентов как о "можно/нельзя читать файл". Но реальная поверхность атаки гораздо шире: агент, который может выполнять произвольный код, имеет те же возможности, что и вы сами. Ограничения на уровне агента - это UX, а не security boundary.
Это не значит, что AI-агенты опасны и ими не надо пользоваться. Это значит, что нужно перестать полагаться на ignore-файлы как на меру безопасности и начать думать о реальной изоляции.
Как вы защищаете секреты при работе с AI-агентами? Или считаете, что это надуманная проблема?