API-ключи в AI-generated приложениях: где Lovable, Bolt и Replit чаще всего теряют секреты
Vibe coding дал возможность запустить приложение за выходные. Он же сделал утечку API-ключей нормой, а не исключением
Почему это важно прямо сейчас

Термин "vibe coding" ввёл Андрей Карпатий в феврале 2025 года. К концу того же года Lovable привлёк $200 млн при оценке $1,8 млрд, генерировал 25 000+ проектов в сутки и стал самой быстрорастущей компанией Европы [7]. Replit, Bolt.new, Base44, Create.xyz — каждая из этих платформ позволяет человеку без опыта в программировании запустить полнофункциональное приложение с базой данных, авторизацией и платёжным процессингом, описав задачу на естественном языке.
Проблема не в том, что AI генерирует плохой код. Проблема в том, что AI оптимизирует код на работоспособность, а не на безопасность. По данным Veracode GenAI Code Security Report (июль 2025), 45% AI-генерированного кода содержит уязвимости, а при выборе между безопасным и небезопасным вариантом реализации модели выбирают небезопасный в 45% случаев [8].
Это создаёт специфическую картину: приложение запускается, проходит первый тест, собирает первых пользователей — и только потом кто-то замечает, что API-ключи лежат в открытом доступе. К этому моменту автоматические сканеры уже давно их забрали.
Четыре способа утечь: анатомия проблемы в vibe coding
Wiz Research (сентябрь 2025) совместно с Lovable систематизировали четыре категории типовых уязвимостей в vibe-coded приложениях [6]. Они не специфичны для одной платформы — это архитектурные паттерны, которые AI воспроизводит по умолчанию.
1. API-ключи в клиентском коде
Это наиболее прямолинейная и массовая проблема. AI-инструменты — Lovable, Bolt, v0, Cursor, Replit — по умолчанию импортируют клиентские SDK прямо во frontend [9]. Чтобы вызов к OpenAI, Stripe или Supabase service_role сработал, ключ оказывается в JavaScript-бандле, который браузер скачивает при каждом посещении страницы.
Любой открывший DevTools → Sources → bundle.js получает этот ключ. Не нужны взломы, брутфорс или специальные инструменты. По данным VibeEval, API-ключи в клиентском коде обнаруживаются в каждом четвёртом отсканированном приложении [9].
Intruder (декабрь 2025) просканировал ~5 млн приложений методом spidering (обход JS-бандлов) и обнаружил более 42 000 открытых токенов 334 типов, из которых 688 токенов репозиториев (GitHub/GitLab) оставались активными [10]. Это принципиально новый класс уязвимостей: стандартные SAST-инструменты, работающие с исходным кодом, их не видят — только сканирование деплоя.
Критически важное разграничение: не все ключи одинаково опасны. Supabase anon_key и Stripe pk_live_ создавались для клиентской стороны. Но service_role у Supabase, sk_live_ у Stripe, sk- у OpenAI/Anthropic — серверные секреты. Попадание такого ключа в бандл означает, что любой посетитель сайта может делать API-запросы за ваш счёт. Конкретный кейс: студенческий проект с хардкодированным OpenAI-ключом в Replit за несколько часов набрал $1 800 в API-расходах до блокировки аккаунта [4].
2. Отсутствие или неправильная настройка Row Level Security
Supabase — стандартный бэкенд для большинства vibe-coded приложений на Lovable, Bolt и многих других платформах. Supabase использует публичный anon_key для прямых REST-запросов из браузера. Архитектурно это допустимо при условии, что Row Level Security (RLS) настроена корректно: она определяет, какие строки из каких таблиц видит конкретный пользователь.
Проблема CVE-2025-48757 в том, что Lovable систематически генерировал приложения с отсутствующими или инвертированными RLS-политиками [2]. В одном из задокументированных случаев AI реализовал контроль доступа через Supabase RPC, но инвертировал логику: аутентифицированные пользователи блокировались, неаутентифицированные получали полный доступ к данным. Эта закономерность воспроизводилась в нескольких критических функциях нескольких приложений.
Итог: 170 из 1 645 проверенных Lovable-приложений (10,3%) имели критические уязвимости, 303 уязвимых Supabase-эндпоинта, в открытом доступе — PII, финансовые данные, API-ключи разработчиков и записи пользователей [2].
В феврале 2026 года исследователь Тайми Хан обнаружил 16 уязвимостей (6 критических) в одном Lovable-приложении, выставленном на Discover Page платформы с 100 000+ просмотров. Утечка затрагивала более 18 000 пользователей [11].
Bolt.new имеет ту же проблему: RLS в Supabase отключена по умолчанию, каждая таблица — потенциальная точка утечки [3].
3. Публичность проектов по умолчанию
Специфика Replit — в модели публичности. Replit-проекты могут быть публичными по умолчанию, исходный код доступен для просмотра любым посетителем [4]. Это означает: даже если ключ не попал в клиентский бандл, он может быть виден в исходниках.
Более тонкая проблема: Replit AI Agent сам вставляет ключ в код, когда пользователь указывает его в промпте. Пользователь думает, что ключ пошёл в Secrets — а он оказывается в main.py или index.js. Ещё один вектор — shell history: команды с секретами в терминале остаются в истории. При форке Repl-проекта секреты из shell history теоретически могут быть видны следующему владельцу [4].
RedAccess (май 2026) обнаружила 380 000 публично доступных активов, созданных на Lovable, Base44, Replit и Netlify, из которых около 5 000 содержали корпоративные данные: расписания судов в портах, данные клинических испытаний, внутренние HR-системы [12]. Настройки приватности требовали явного действия пользователя для закрытия доступа.
4. Source maps и .env-файлы в продакшне
Bolt.new генерирует production-сборки с включёнными source maps [3]. Source maps — файлы для дебаггинга, раскрывающие оригинальную структуру кода: пути к файлам, имена переменных, логику приложения. Атакующий, нашедший source map, получает читаемый исходник даже из минифицированного бандла.
Параллельная проблема — .env-файлы, случайно попавшие в деплой. Попробуйте обратиться к yourdomain.com/.env: если файл доступен, все секреты сразу видны. Это не теоретическая атака — сканеры автоматически проверяют эту точку в числе первых.
Платформы под микроскопом: что характерно для каждой
Lovable
Самая документированная история уязвимостей среди vibe-coding платформ. Три задокументированных инцидента за 2025–2026 годы. Системная проблема — архитектурная: клиентский SDK с публичным anon_key + Supabase без настроенного RLS = открытая база для любого посетителя.
Апрельский инцидент 2026 года: исследователь показал, что при выгрузке исходного кода через Lovable API вместе с кодом передавались хардкодированные Supabase-credentials. Среди пострадавших проектов — датская некоммерческая организация Connected Women in AI; в данных оказались записи сотрудников Nvidia, Microsoft, Uber, Spotify [13].
Дополнительная особенность: история чатов и коммитов на Lovable.dev может быть публичной. Пользователи, передававшие ключи LLM в промпте, иногда сохраняли их в переменных среды — или непосредственно в кодовой базе [2].
Lovable добавил "security scan" в Lovable 2.0 (апрель 2025), но сканер проверяет наличие RLS-политики, не её корректность [2]. False sense of security в чистом виде.
Bolt.new
Bolt генерирует frontend-first код; все вызовы к платным API-провайдерам естественным образом уходят из клиентской части. Это определяет главный вектор: exposed API keys в JS-бандле [3].
Bolt деплоится по умолчанию на Netlify. Netlify Functions — корректный способ изолировать секреты на серверной стороне, но Bolt не генерирует их автоматически для каждого API-вызова. Разработчик должен явно переписать архитектуру: вместо прямого вызова из браузера — прокси через Netlify Function с ключом в environment variable [3].
Практический пример: основатель задеплоил Bolt-приложение с OpenAI-ключом во frontend. К утру ключ был скрапирован и выставлен счёт на сотни долларов [3]. Сканеры ищут паттерны sk-, OPENAI_API_KEY, service_role, sk_live_ — это автоматизировано.
Bolt ввёл раздел Secrets для серверных функций [14], но этот механизм требует явного использования: агент не всегда использует его по умолчанию.
Replit
У Replit есть встроенный Secrets manager с шифрованием через Google Cloud Secure Storage [15]. Технически это правильное решение. Проблема — в разрыве между наличием инструмента и его использованием.
Три основных вектора в Replit-приложениях:
- Хардкодированные ключи в публичных Repl-проектах — наиболее частая критическая уязвимость [4].
- AI Agent вставляет ключ из промпта в код — Replit сам предупреждает об этом и блокирует подобный prompt в новых версиях [15], но не всегда.
- Client-side API calls: Agent генерирует frontend JavaScript, который вызывает сторонние API прямо из браузера. Даже если ключ хранится в Secrets, Agent может передать его в клиентский HTML-шаблон [4].
Replit сканирует публичные Repl при публикации и отзывает найденные ключи [15]. Но это реактивная мера: между деплоем и сканом есть окно, а автоматические боты работают непрерывно.
Что говорят цифры: масштаб проблемы
GitGuardian State of Secrets Sprawl 2026 — наиболее авторитетный агрегированный источник по теме:
- 28,65 млн новых хардкодированных секретов в публичных GitHub-репозиториях за 2025 год. Рост +34% год к году, крупнейший за всю историю отчёта [5].
- Утечки из AI-assisted commits в среднем вдвое превышают базовый показатель. Commits, помеченные как Claude Code-assisted, показали ~3,2% при базовом ~1,5–1,6% [5].
- AI-сервисные учётные данные (OpenAI, Anthropic, другие LLM-провайдеры): +81% год к году, 1 275 105 задетектированных утечек за 2025 год [5].
- 24 008 уникальных секретов обнаружены в MCP-конфигурационных файлах на GitHub — новый вектор 2025 года. Из них 2 117 оставались валидными [5].
- 64% секретов, утёкших в 2022 году, по-прежнему не отозваны в 2026-м [5].
- Внутренние репозитории содержат секреты в 6 раз чаще публичных. 32,2% внутренних репо имеют хотя бы один хардкодированный секрет [5].
Исследование Escape (октябрь 2025): 5 600+ vibe-coded приложений — 2 000+ уязвимостей, 400+ открытых секретов, 175 случаев PII (медицинские записи, IBAN, телефоны, email) [1].
Cyble Research (февраль 2026): ~3 000 публичных сайтов с OpenAI API-ключами в клиентском JavaScript. Ключи не просто видны — они активно используются в реальном времени, их можно скопировать и немедленно применить [16].
Почему AI делает это снова и снова
Важно не персонифицировать проблему — это не ошибка конкретной платформы или конкретного разработчика. Это структурная проблема AI-генерации кода.
Columbia University исследователи сформулировали точно: "Coding agents оптимизируют, чтобы код работал, а не чтобы код был безопасным" [17]. Модели обучены на огромных корпусах кода, где хардкодированные ключи в примерах, туториалах и quick start-документации — норма. Когда модель ищет кратчайший путь к рабочему коду, она воспроизводит эти паттерны.
Три структурных фактора усугубляют ситуацию:
- Скорость как ценность. Lovable генерирует 25 000+ проектов в день. Разработчик, получивший рабочий прототип за несколько минут, не склонен останавливаться на аудит безопасности перед деплоем.
- Нет автора уязвимости. В традиционном коде есть разработчик, принявший конкретное решение. В vibe-coded приложении — только промпт и AI. Понять, почему был сделан небезопасный выбор, значительно сложнее.
- Дефицит опыта у создателей. Lovable и аналоги явно ориентированы на аудиторию без технического бэкграунда. CEO Replit Амджад Масад точно сформулировал проблему: "Moя мама использует Lovable, и без обид, но она не думает о role-based access control" [12].
Что делать: чек-лист до деплоя
Этот список не заменяет полноценный security audit, но закрывает наиболее частые векторы в vibe-coded приложениях.
Управление секретами
- Никогда не указывайте реальный ключ в промпте — ни в Lovable, ни в Bolt, ни в Replit. AI-агент может вставить его в код.
- Используйте встроенный Secrets manager платформы: в Replit это отдельная вкладка с шифрованием, в Bolt — раздел Secrets для серверных функций.
- В Python обращайтесь через
os.environ['KEY_NAME'], в Node.js — черезprocess.env.KEY_NAME. Никакого хардкода. - Проверьте JS-бандл перед деплоем: ищите паттерны
sk-,AIzaSy,mongodb+srv://,postgres://,service_role,sk_live_. Это сигнатуры OpenAI, Google, MongoDB, PostgreSQL, Supabase и Stripe. - Отключите source maps в production: в Next.js —
productionBrowserSourceMaps: false. - Проверьте доступность
yourdomain.com/.envиyourdomain.com/.git/HEAD— эти URL сканируются автоматически.
Supabase и база данных
- RLS must be on для каждой таблицы с пользовательскими данными. Наличие политики — не то же самое, что её корректность. Проверьте фактическое поведение: аутентифицированный запрос должен возвращать только свои данные, неаутентифицированный — 0 строк или ошибку авторизации.
- Не используйте
USING (true)в RLS-политиках — это отключает проверку. service_roleключ Supabase должен быть только на серверной стороне. В клиентском коде — толькоanon.
Архитектура API-вызовов
- Все вызовы к платным API (OpenAI, Anthropic, Stripe) должны идти через серверный прокси (Netlify Function, Supabase Edge Function, собственный бэкенд). Браузер не должен знать ключ.
- Настройте CORS явно:
*на эндпоинтах с пользовательскими данными — ошибка. - Проверьте, что аутентификация реализована на уровне сервера, не только фронтенда. Frontend-only auth обходится прямым вызовом API.
Публичность и настройки доступа
- В Replit явно переведите продакшн-Repl в private, если он содержит credentials или пользовательские данные.
- После форка любого Repl-проекта ротируйте все credentials — исходный проект мог содержать секреты.
- Настройте мониторинг API usage: аномальный рост расходов — первый признак утечки ключа.
Кейсы: когда уже поздно
Moltbook
Vibe-coded социальная сеть (AI-агент social network) запустилась и за три дня потеряла 1,5 млн API-ключей аутентификации и 35 000 email-адресов. Корень — Supabase без RLS, misconfigured для публичного доступа на чтение и запись [18]. Основатель публично заявил, что не написал ни строчки кода сам. Это не ирония — это описание бизнес-модели vibe coding.
Connected Women in AI
Датская некоммерческая организация использовала Lovable для внутренних инструментов. Апрельский инцидент 2026 года: при выгрузке исходников через Lovable API вместе с кодом утекли хардкодированные Supabase-credentials. В открытых данных — имена, должности, LinkedIn-профили, Stripe customer IDs сотрудников Accenture Denmark и Copenhagen Business School [13].
Студенческий проект на Replit
Типовой кейс: разработчик создал GPT-chatbot, вставил OpenAI-ключ прямо в main.py, поделился ссылкой. Боты скрапировали ключ в течение нескольких часов, по нему прогнали сотни запросов. Итог — $1 800+ в API-расходах до блокировки [4].
Palantir-инженер и 47 минут
В апреле 2025 инженер Palantir Даниэль Асариа за 47 минут взломал несколько сайтов из списка "Top Launched" на Lovable.dev, используя 15 строк Python: собрал URL из публичных листингов, обратился к /admin, /data, /api/keys — получил секреты, токены и пользовательские данные без авторизации [19].
Что происходит с украденными ключами
Украденный API-ключ — не просто данные. Это доступ к ресурсам.
OpenAI/Anthropic ключи монетизируются тремя способами: inference abuse (генерация контента за чужой счёт), продажа в Telegram-каналах или на специализированных маркетплейсах, использование в downstream-атаках. По данным Cyble Research, ключи в production-сайтах активно используются в реальном времени — их не просто собирают, с них сразу делают запросы [16].
Stripe sk_live_ даёт полный доступ к Stripe-аккаунту: можно создавать charges, делать возвраты, получать список всех клиентов. AWS credentials открывают доступ к S3-бакетам, EC2-инстансам и всей инфраструктуре — есть задокументированные случаи шифрования S3-бакетов с требованием выкупа [5].
Supabase service_role обходит RLS полностью — это не ограниченный ключ, это административный доступ к базе.
Временное окно между деплоем и обнаружением часто составляет минуты: автоматические сканеры непрерывно индексируют GitHub, npm и задеплоенные сайты на предмет известных форматов ключей [9]. Минификация и обфускация не помогают — у ботов есть регулярные выражения и entropy-based detection.
Pull request, который никто не дочитал
У команд, которые уже ускорили разработку с AI, есть специфическая проблема: скорость генерации кода опередила скорость его проверки. AI пишет быстро. Ревью не успевает.
В vibe coding этот разрыв экстремален. Нет pull request в классическом смысле — код генерируется интерактивно, прямо в браузере, и уходит в деплой по кнопке. Нет автора, ответственного за конкретное архитектурное решение. Нет момента, когда кто-то второй смотрит на код.
Lovable добавил security scan — но он проверяет наличие, не корректность. Replit автоматически сканирует публичные Repl — но это реакция после факта. Bolt предлагает Secrets — но не навязывает их использование.
Инструменты есть. Автоматического применения нет.
Именно здесь имеет смысл добавить слой контроля до мерджа и релиза — не вместо существующих проверок, а рядом с ними. HighVibe анализирует конкретные изменения в коде и конфигурациях: хардкодированные секреты, слишком широкий CORS, отсутствие серверной авторизации, debug-настройки в продакшне — всё это видно в дифе, до того как изменение ушло в прод. Особенно важно для команд, где AI генерирует большую часть кода: рабочий PR не обязательно безопасный, а дифы AI-кода дочитывают не до конца.
Тренды: что будет дальше
На основе актуальных данных — несколько направлений, которые стоит отслеживать:
MCP как новый вектор. GitGuardian зафиксировал 24 008 секретов в MCP-конфигурациях на публичном GitHub [5]. Официальная документация MCP-серверов часто рекомендует хардкодить ключи прямо в конфигурационных файлах. Когда insecure-паттерн нормализован в официальных quickstart-примерах, он распространяется со скоростью экосистемы.
Shadow AI и vibe coding в корпоративном контексте. RedAccess обнаружила внутренние приложения крупных компаний, задеплоенные без прохождения SDLC: расписания судов, клинические испытания, HR-системы [12]. Любой сотрудник с Lovable-аккаунтом может задеплоить internal tool в обход всего security-периметра. Это не гипотеза — это задокументированный кейс мая 2026 года.
AI-агенты с локальным доступом расширяют периметр угрозы. Когда агент работает с редактором, терминалом и файловой системой, developer machine становится частью credential perimeter. Supply-chain атака Shai-Hulud (2025) на @ctrl/tinycolor показала, как вредоносный npm-пакет может автоматически собирать секреты с машины разработчика [15].
Заключение: работает ≠ безопасно
Vibe coding снизил порог входа в разработку до нуля. Это создаёт огромную ценность — и огромную поверхность атаки. Не потому что AI плохой, а потому что AI оптимизирует на функциональность, а не на security.
Три вывода для команд, которые уже используют или планируют использовать vibe-coding платформы:
- Архитектурный паттерн платформы определяет ваш риск. Если платформа по умолчанию делает вызовы к API из клиентского кода — все ключи в клиентском коде. Это не ошибка разработчика, это конфигурация по умолчанию.
- Наличие security-инструмента ≠ его корректная работа. Lovable security scan не проверяет, работает ли RLS. Replit Secrets не гарантирует, что AI-агент ими воспользуется. Инструмент нужно проверять, не просто подключать.
- Ротация после утечки — не лечение. 64% секретов 2022 года валидны в 2026-м [5]. Это означает, что большинство команд не имеет автоматизированного процесса ротации. Между деплоем и обнаружением утечки часто несколько минут — боты работают быстрее ручного мониторинга.
Vibe coding останется. Скорость разработки с AI продолжит расти. Задача — выстроить контроль, который растёт с той же скоростью, а не пытается её остановить.
Источники
[1] Escape — "Methodology: 2k+ Vulnerabilities in Vibe-Coded Apps" — escape.tech/blog/methodology-how-we-discovered-vulnerabilities-apps-built-with-vibe-coding/ — октябрь 2025
[2] Superblocks — "Lovable Vulnerability Explained: How 170+ Apps Were Exposed" — superblocks.com/blog/lovable-vulnerabilities — март 2026
[3] Ubserve — "Bolt.new Security Checklist 2026: Stop Key Leaks" — ubserve.com/security-checklists/bolt-new-security-checklist
[4] Vibe App Scanner — "Exposed API Keys in Replit: Public Repls, .env Files, and Shell History" — vibeappscanner.com/security-issue/replit-exposed-api-keys
[5] GitGuardian — "The State of Secrets Sprawl 2026" — blog.gitguardian.com/the-state-of-secrets-sprawl-2026/ — март 2026
[6] Wiz Research — "Wiz Research Finds Risks in 20% of Vibe-Coded Apps" — wiz.io/blog/common-security-risks-in-vibe-coded-apps — сентябрь 2025
[7] Snyk — "The Highs and Lows of Vibe Coding" — snyk.io/articles/the-highs-and-lows-of-vibe-coding/ — октябрь 2025
[8] Veracode — GenAI Code Security Report 2025 (цитируется по: The Register, Wiz.io/academy) — июль 2025
[9] VibeEval — "API Token Leak Checker" — vibe-eval.com/token-leak-checker/
[10] BusinessWire / Intruder — "Intruder Uncovers New Secrets Detection Techniques, Finds Thousands of Exposed Tokens" — businesswire.com/news/home/20251211585215/en/Intruder-Uncovers-New-Secrets-Detection-Techniques... — декабрь 2025
[11] The Register — "AI-built app on Lovable exposed 18K users, researcher claims" — theregister.com/2026/02/27/lovable_app_vulnerabilities/ — февраль 2026
[12] Axios — "AI vibe-coding apps leak sensitive data" — axios.com/2026/05/07/loveable-replit-vibe-coding-privacy — май 2026
[13] The Next Web — "Lovable security crisis: 48 days of exposed projects" — thenextweb.com/news/lovable-vibe-coding-security-crisis-exposed — 2026
[14] Bolt Support — "Database: Secrets settings" — support.bolt.new/cloud/database/secrets
[15] Replit Blog — "Keeping Your API Keys Safe" — blog.replit.com/keeping-your-api-keys-safe
[16] Cyble Research — "When AI Secrets Go Public: ChatGPT API Key Exposure" — cyble.com/blog/when-ai-secrets-go-public-chatgpt/ — февраль 2026
[17] Zuplo — "Vibe Coding Makes Fast APIs — Not Safe Ones" — zuplo.com/learning-center/vibe-coding-api-security — март 2026
[18] Autonoma — "Vibe Coding Failures: 7 Real Apps That Broke in Production" — getautonoma.com/blog/vibe-coding-failures — март 2026
[19] a42.tech — "How Hacked Lovable.dev Sites?" — a42.tech/blog/en/how-hacked-lovabledev-sites — апрель 2025