Введение
Vibe Coding — термин, который в 2025-2026 годах стал мемом, а затем — реальностью. Речь про генерацию целых приложений через промпты к языковым моделям: ты говоришь нейросети «сделай мне ToDo-лист с авторизацией через Telegram», и через 15 минут у тебя есть работающий код. Звучит как магия. Но есть нюанс.
Я предприниматель, и последние полгода моя команда плотно занимается безопасностью AI-сгенерированных продуктов. Мы просканировали 100 таких приложений — от стартапов из Product Hunt до внутренних тулов корпораций. Результат пугает: 73 из них содержат уязвимость класса Broken Object Level Authorization (BOLA).
Что такое BOLA и почему это страшно?
BOLA (Broken Object Level Authorization) — это когда приложение не проверяет, имеет ли пользователь право на доступ к конкретному объекту. Классический пример: ты входишь в систему как user_1, меняешь в URL цифру на user_2 — и видишь чужие данные. В API-мире это выглядит так: GET /api/users/123 возвращает профиль, но если подставить 124 — тоже возвращает, хотя ты не админ.
Согласно отчёту OWASP API Security Top 10 2023 года (актуальному и на 2026-й), BOLA занимает первое место по распространённости среди API-уязвимостей. На практике это означает, что злоумышленник может получить доступ к личным данным, платёжной информации, перепискам — просто перебирая ID.
Как мы проводили сканирование
Мы отобрали 100 приложений, созданных с помощью Vibe Coding (Cline, Replit Agent, Bolt.new, Lovable и другие генераторы). Все они имели хотя бы один API-эндпоинт и работали в продакшене — то есть были доступны реальным пользователям. Сканирование проводилось автоматизированным инструментом на базе Burp Suite с кастомными правилами, а затем каждый случай подтверждался вручную.
Результаты:
| Тип уязвимости | Количество приложений | Процент от выборки |
|---|---|---|
| BOLA (IDOR) | 73 | 73% |
| Отсутствие аутентификации на эндпоинте | 41 | 41% |
| Утечка токенов в логах | 22 | 22% |
| SQL-инъекции | 8 | 8% |
Да, у некоторых приложений было несколько проблем одновременно.
Почему Vibe Coding генерирует дырявые приложения?
Основная причина — языковые модели обучались на коде из открытых репозиториев, где часто нет слоя авторизации. Модель «видит» паттерн: «есть эндпоинт getUserById — значит, просто возвращаем данные по ID». Проверка прав доступа — это дополнительный код, который модель добавляет только если явно попросить. А кто из стартаперов, генерирующих MVP за вечер, вспомнит про авторизацию?
Вот типичный код, который сгенерировала одна из моделей:
@app.route('/api/user/<int:user_id>')
def get_user(user_id):
user = db.get_user_by_id(user_id)
return jsonify(user)
Этот код не проверяет, что текущий пользователь — это тот самый user_id. Любой может подставить чужой ID. И это не ошибка модели — это следствие того, что в промпте не было сказано «добавь проверку прав». Модель не умеет читать мысли.
Реальный кейс: как BOLA убил стартап
Один из просканированных проектов — сервис для обмена визитками между участниками конференций. Приложение генерировало QR-код, по которому можно было получить контакт. Эндпоинт выглядел так: GET /api/cards/9876. Мы подставили 9877 — и получили контакты другого человека. Потом 9878 — ещё одного. За час мы выгрузили 5000 контактов с телефонами и email. Стартап закрылся через две недели после того, как мы сообщили им об уязвимости.
Что делать, если ты используешь Vibe Coding?
Первое — не паниковать. Vibe Coding — мощный инструмент для прототипирования. Но в продакшен код должен идти только после аудита безопасности. Вот план действий:
-
Добавь в промпт явные требования по безопасности. Например: «каждый эндпоинт должен проверять, что пользователь имеет доступ к запрашиваемому объекту, используя JWT-токен из заголовка Authorization».
-
Используй статический анализатор. Такие инструменты, как Semgrep или Snyk, умеют находить BOLA на уровне кода. Мы используем Semgrep с кастомным правилом для Python — он ловит 80% таких уязвимостей до деплоя.
-
Тестируй API вручную. После генерации кода просто попробуй подставить другой ID в URL. Если данные ушли — у тебя BOLA. На исправление уходит 10 минут, а последствия — потеря данных клиентов.
-
Не храни ID в открытом виде. Используй UUID вместо инкрементальных чисел. Это не панацея, но усложняет перебор.
Выводы
Vibe Coding останется с нами — слишком удобно генерировать код под задачу за минуты. Но наше исследование показывает: 73% AI-сгенерированных приложений имеют BOLA. Это не приговор, а сигнал к действию. Если ты предприниматель и используешь такие инструменты — потрать час на аудит безопасности до запуска. Иначе следующий сканер может быть не исследователем, а злоумышленником.
Мы продолжаем мониторинг и планируем расширить выборку до 500 приложений. Результаты опубликуем в открытом доступе. Безопасность AI-кода — это новая норма, и лучше быть к ней готовым заранее.
Исследование проведено командой ASI Biont. Если вы хотите проверить своё приложение на уязвимости — пишите в комментариях или в личку. Мы делимся методологией бесплатно.
Комментарии