Security Blog

Ваш ИИ-ассистент для программирования только что прочитал Ваш кошелёк

#193

October 2, 2026 · By Marketing team

← All posts

ИИ-инструменты для программирования читают файлы .env ещё до того, как Вы введёте хоть один символ. Ваши API-ключи — каждый из которых представляет собой кредитную карту без лимита расходов — оказываются в чужом контекстном окне до первого запроса. Проблема не в ИИ. Проблема в том, что секреты — это файлы.

Откройте ИИ-ассистент для программирования. Прежде чем Вы введёте хоть один символ, он уже прочитал каталог Вашего проекта. Ваш файл .env. Ваши API-ключи. Пароль к базе данных. Ваш секретный ключ Stripe.

Вы его об этом не просили. Вы этого не одобряли. Это функция, а не ошибка — инструменту нужен контекст проекта, чтобы быть полезным. Поэтому он читает всё, что может прочитать разработчик.

А разработчик может прочитать всё.

Версия в формате greentext

На этой неделе разошёлся пост, написанный как внутренний монолог разработчика:

> Открываю Claude Code. Ваш .env читается до того, как Вы что-либо вводите. Ваши API-ключи теперь в чате. Вы добавляете «не читать .env» в CLAUDE.md. Не работает.

Этот пост увидели 380 000 человек. 2 700 сохранили его в закладки. Не потому что это была новость — потому что это было зеркало.

Каждый разработчик, читавший его, думал одно и то же: это же моя настройка.

Инструкции не работают

Первое, что попробовали люди, — написать правила. «Не читать файлы .env». В CLAUDE.md, в AGENTS.md, в системных промптах. Прямые, явные запреты.

Инструмент всё равно читал файлы.

Это логично, если подумать. Файл читается в рамках построения контекста проекта — ещё до того, как инструкции вообще будут обработаны. Запрещать модели читать файл, который она уже прочитала, — всё равно что просить человека забыть то, что он только что увидел. Информация находится в контекстном окне. Она уже передана. Инструкция приходит после того, как ущерб нанесён.

Один исследователь обнаружил, что даже пофайловые правила запрета можно обойти с помощью пользовательских скриптов или цепочек пайпов. Другой обнаружил завышенные счета за прокси, поскольку его учётные данные HTTP_PROXY автоматически загружались и использовались.

Деньги в Вашем .env

Люди трактуют это как проблему конфиденциальности. Это финансовая проблема.

Откройте типичный файл .env в продакшен-проекте:

OPENAI_API_KEY=sk-...
STRIPE_SECRET_KEY=sk_live_...
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=...
DATABASE_URL=postgresql://user:pass@...

Ключ OpenAI — это кредитная карта без лимита расходов и без PIN-кода. Тот, кто владеет этой строкой, может за ночь выполнить вызовы API на 40 000 долларов. Ключ Stripe позволяет оформлять возвраты средств, создавать списания, получать доступ к платёжным данным клиентов. Учётные данные AWS — в зависимости от политики IAM, которая почти наверняка излишне широкая, — позволяют запускать GPU-инстансы, получать доступ к бакетам S3 или удалять инфраструктуру.

Это не список паролей. Это список кошельков, у каждого свой баланс и нет замка.

29 миллионов кошельков на тротуаре

В последнем отчёте GitGuardian насчитано 28,6 миллиона секретов, раскрытых в публичных коммитах GitHub в 2025 году. Рост на 34% по сравнению с предыдущим годом и крупнейшее годовое увеличение, которое им когда-либо удавалось зафиксировать.

Показатели, специфичные для ИИ, ещё хуже. Раскрыто 1,2 миллиона секретов ИИ-сервисов — рост на 81% год к году. Коммиты, соавторами которых выступали ИИ-инструменты для программирования, утекали с секретами примерно с двукратной скоростью относительно базового уровня. И 24 000 уникальных секретов обнаружено в конфигурационных файлах MCP — инфраструктуре, соединяющей ИИ-агентов с внешними сервисами.

Двенадцать из пятнадцати наиболее быстрорастущих типов утёкших секретов — ИИ-сервисы. Не базы данных. Не облачные провайдеры. ИИ-сервисы.

Инструменты, которые мы используем, чтобы писать код быстрее, утекают ключи к системам, с которыми этот код соединяется.

Настоящая проблема

Разработчик, опубликовавший ту ветку greentext, завершил её практическим решением — конфигурацией settings.json, которая блокирует чтение файлов. Это работает. Пока что, для этого инструмента.

Но настоящая проблема — не Claude Code, не Cursor и не Copilot. Настоящая проблема в том, что секреты — это файлы.

Файл .env — это документ в открытом виде, лежащий на диске, доступный для чтения любым процессом, запущенным от Вашего имени. До появления ИИ-инструментов для программирования процессы, читавшие Ваш проект, — это git, npm, node, Ваш редактор. Вы им неявно доверяли. Вы не задумывались о том, что Ваши секреты отделяет от утечки одна команда cat.

ИИ-инструменты для программирования просто сделали неявное явным. Они читают Ваш проект так же, как и любой другой инструмент, — просто отправляют контекст туда, где Вы можете его увидеть.

Ваш CI-конвейер тоже читает файлы .env. Ваш тестовый раннер тоже. Ваш линтер тоже. Сборка Docker тоже. Никто из них тоже не спрашивал разрешения. Вы просто не замечали этого, потому что они не показывали Вам стенограмму чата с тем, что нашли.

Паттерн под поверхностью

70% секретов, утёкших в 2022 году, всё ещё активны сегодня. Не ротированы. Не отозваны. Всё ещё работают, всё ещё предоставляют доступ — три года спустя.

Это настоящая цифра. Не 29 миллионов утечек — 70% так и не устранены. Потому что ротация ключа означает найти каждую систему, которая его использует, обновить каждый деплой, протестировать каждую интеграцию. Ключ был создан один раз, вставлен в файл .env и больше о нём не думали. Стоимость его утечки мгновенна. Стоимость устранения утечки не ограничена.

Поэтому большинство организаций не устраняют её. Они не могут. Они не знают, какие ключи где находятся, какие всё ещё активны, какие были скопированы в другие файлы .env на других машинах другими разработчиками, которым нужно было заставить функцию работать в пятничный вечер.

Что это на самом деле означает

Каждый файл .env — это ставка. Ставка на то, что ни один процесс никогда не прочитает его, не будучи на то уполномоченным. Ставка на то, что ни один инструмент никогда не отправит его куда-то неожиданно. Ставка на то, что ни один разработчик никогда не закоммитит его случайно.

29 миллионов раз за прошлый год кто-то проиграл эту ставку. Только на публичном GitHub. Приватные репозитории — где GitGuardian обнаружил секреты в 35% репозиториев — даже не учтены.

Решение — не правило в settings.json. Решение — не запись в .gitignore. Решение — не надпись «НЕ ЧИТАТЬ .ENV» заглавными буквами в Вашем файле инструкций.

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

Если секрет находится на диске, его прочитают. Единственный вопрос — когда и чем.

---

Источники