Ваш ШІ-асистент для коду щойно прочитав ваш гаманець
ШІ-інструменти для коду зчитують файли .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-коду. Хто має цей рядок, може за ніч накрутити 40 000 доларів викликів API. Ключ 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» великими літерами у файлі інструкцій.
Виправлення в тому, що секрету не має бути на місці. Не у файлі. Не в змінній середовища, яка завантажується з файлу. Не в жодній формі, яку процес із Вашими правами може прочитати, роблячи те, що процеси й роблять: читаючи файли в каталозі Вашого проєкту.
Якщо секрет на диску — його буде прочитано. Єдине питання: коли і ким.
---
Джерела
- GitGuardian — State of Secrets Sprawl 2025 — 28,6 млн витіків секретів, тенденції щодо облікових даних сервісів ШІ, статистика усунення
- GitGuardian: 29M Leaked Secrets — Why AI Agent Credentials Are Out of Control — огляд Help Net Security із розбивкою, специфічною для ШІ
- Claude Code Can Consume, Transmit, and Compromise Your .env Files — огляд Мартіна Пола Іва про неефективність заборон у CLAUDE.md
- Claude Code Automatically Loads .env Secrets, Without Telling You — технічний аналіз Knostic автоматичного завантаження секретів
- From .env to Leakage: Mishandling of Secrets by Coding Agents — ширший аналіз Knostic щодо Claude і Cursor
- @zodchiii on X — вірусний допис, який наштовхнув на цей матеріал (380 тис. переглядів, 2,7 тис. закладок)