В клуб →
AI Саша / Гайды / vibe-hacks
вайбкодинг · безопасность · чек-лист

Двенадцать способов, которыми ломают именно вайбкодеров

Быстрый чек-лист самых частых дыр в проектах на Cursor и Claude Code, от перебора паролей до состояния гонки. Плюс история про то, как в 2008 году взломали мой собственный проект через загрузку аватарки.

13-15 мин чтенияуровень: один вечер2 учебные инфографикислово: АУДИТ
Кодовое слово АУДИТ в комментарии под роликом. Бот пришлёт этот разбор целиком, вместе с учебными баннерами и готовыми каркасами.

01В чём фокус

Крупные банки и IT-компании держат целые отделы безопасности, нанимают пентестеров, платят за найденные уязвимости, и их всё равно регулярно взламывают. Если ресурсов такого масштаба не хватает, какие шансы у сервиса, собранного за выходные в Cursor или Claude Code?

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

Этот гайд разбирает двенадцать самых частых способов, которыми ломают сервисы, написанные через вайбкодинг. Задача не глубоко объяснить механизм каждой атаки (это отдельная большая тема), а дать рабочий чек-лист: пройтись по своему проекту и закрыть то, что ещё открыто.

02Что нужно до старта

Любой опубликованный проект. Боты начинают сканировать новый сервер в первые минуты после публикации, размер аудитории здесь ни при чём.

Пятнадцать минут на пункт. Каждая из двенадцати дыр закрывается одной-двумя строчками кода или одной настройкой. Сложность не в реализации, а в том, что таких проверок больше сотни и они разбросаны по всему проекту, а каждый новый кусок кода от агента нужно заново проверять на то же самое.

Готовность просить конкретно. Вместо «сделай форму входа» нужно «сделай форму входа с ограничением количества попыток и защитой от перебора паролей». Агент выполняет то, что попросили, а не то, что подразумевалось.

03Ядро

Двенадцать пунктов группируются в четыре смысловых блока: вход в аккаунт, чужие данные, деньги и логи, дыры от самого стека.

вход в аккаунт        брутфорс · credential stuffing
чужие данные            IDOR · неправильные права доступа · SQL-инъекция
деньги                  подделка вебхука · race condition
код и окружение         утечка ключей · непроверенные библиотеки ·
                       XSS · CSRF · чувствительные данные в логах

Ни один из двенадцати способов не требует гениального хакера. Почти всё автоматизировано: сканер гоняют по тысячам сайтов подряд и смотрят, где дверь осталась открытой. Никто не ищет именно вас.

04Двенадцать способов и лекарство от каждого

Брутфорс. Форма входа без ограничения попыток, без капчи и без таймаутов. Сканер перебирает десятки тысяч комбинаций логина и пароля за час. Лекарство: лимит попыток на аккаунт за отрезок времени.

Credential stuffing. Готовые связки логин-пароль из утечек других сервисов. Пользователь завёл почту и пароль на форуме про рыбалку в 2019 году, форум слили в сеть, и теперь эта пара просто подставляется к вашему сервису без перебора вообще, потому что многие используют один пароль на разных сайтах. Лекарство то же самое: лимит попыток плюс уведомление пользователя о подозрительном входе.

Утечка ключей. Ключ от базы данных или токен бота лежит прямо во фронтенде и виден через обычный просмотр страницы в браузере, либо случайно попал в публичный репозиторий на GitHub. Специальные сканеры прочёсывают весь GitHub именно в поисках таких файлов и находят ключ за считанные минуты после публикации. Лекарство: ключи только в переменных окружения, файл с ними не пушится в Git.

IDOR. Проверили, что пользователь залогинен, но не проверили, что заказ номер 4521 принадлежит именно ему. Меняешь номер в адресной строке на 4520 и видишь чужие имя, адрес, последние цифры карты. Лекарство: сервер проверяет владельца записи при каждом запросе, а не только факт авторизации.

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

SQL-инъекция. Один из старейших способов взлома баз данных. Специальная конструкция вместо обычного текста в поле поиска, и если запрос к базе собран склейкой строк, база выполняет её как команду. Лекарство: параметризованные запросы или ORM вместо ручной сборки SQL-строк.

Подделка вебхука. Сервер принимает уведомление об успешной оплате, но не проверяет, что оно действительно пришло от платёжной системы, а не от кого угодно. Такое уведомление легко отправить напрямую, минуя саму оплату, и получить платный доступ бесплатно. Лекарство: проверка подписи или секретного ключа платёжной системы на каждом входящем вебхуке.

Непроверенные библиотеки. Агент почти всегда подключает чужие пакеты и ставит их без разбора, кто автор и когда было обновление. Библиотека может изначально воровать данные либо быть нормальной, но с давно известной уязвимостью, для которой вы просто ещё не поставили обновление. Лекарство: периодически спрашивать у агента, какие зависимости устарели, и проверять происхождение новых пакетов.

XSS. В поле отзыва вставляют не текст, а код, и он выполняется у каждого, кто потом открывает страницу, забирая доступ к его аккаунту. Лекарство: выводить пользовательский текст как текст, не как исполняемый HTML.

CSRF. Сайт принимает запросы с любого чужого сайта, потому что так было проще настроить фронтенд. Пользователю присылают ссылку на постороннюю страницу, и пока он на ней с открытым в другой вкладке аккаунтом на вашем сайте, оттуда тихо уходят данные, он для этого даже не нажимает ничего. Лекарство: SameSite-куки и CSRF-токен на важные действия.

Загрузка вредного файла. Загрузку аватарок разрешили, но проверяют только расширение в названии файла. Вредоносный скрипт называют avatar.php, сервер сохраняет его в папку, откуда сам готов исполнить код, и через прямую ссылку на файл открывается доступ ко всему серверу. Лекарство: проверять реальное содержимое файла, а не только имя, и хранить загрузки там, откуда сервер не исполняет код.

Race condition. Несколько одинаковых запросов приходят в одну и ту же миллисекунду, например применить промокод, и сервер не успевает проверить баланс между первым и вторым запросом, применяя оба разом и обнуляя цену. Лекарство: блокировка на уровне записи базы данных при одновременных изменениях одного и того же ресурса.

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

05История: как взломали мой собственный проект

В 2008 году я запускал блог-платформу, на пике выходившую на тысячу постов в день, крупнейшую такую площадку в стране на тот момент. Никакого вайбкодинга тогда ещё не было, я сам только пару лет занимался разработкой.

Меня взломали ровно через способ загрузки вредного файла: вместо аватарки на сервер загрузили PHP-скрипт. Взломщик сам написал мне, что проект взломан и база данных уже скачивается. Я зашёл на сервер и увидел, что файл дампа базы действительно создаётся, но по прямой ссылке из браузера он ещё не открывался, значит скачать его пока не успели. Спросил, как он это провернул, он честно объяснил: залил скрипт под видом аватарки. Оказалось, что он не вымогатель, а просто тренировался на популярном проекте. Пока мы переписывались, я удалил его файл, закрыл дырку в загрузке аватарок и стёр недокачанный дамп. База так и не утекла.

Вывод для себя я сделал такой: не каждый, кто нашёл дыру в вашем проекте, хочет навредить. Часть делает это из любопытства или ради тренировки без злого умысла, и мне тогда повезло. Но главное, что дал тот разговор, это не то, что меня взломали, а как именно меня взломали. Без этого я бы закрыл только симптом, а не саму дыру. Безопасность это не список страшных терминов, а понимание конкретных способов атаки: поняв способ, закрываешь дыру навсегда, а не до следующего такого же взлома.

06Свой результат за вечер

Четыре шага по чек-листу, от самого дешёвого к самому объёмному.

Шаг первый. Вход и ключи. Проверьте лимит попыток входа, наличие капчи на форме логина, и что ни один ключ или пароль не лежит открыто в коде фронтенда или в публичном репозитории.

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

Шаг третий. Деньги и файлы. Если в проекте есть оплата, проверьте подпись входящих вебхуков платёжной системы. Если есть загрузка файлов, проверьте реальное содержимое, а не только расширение в названии.

Шаг четвёртый. Системная проверка. Соберите под свой стек инструкцию для агента, которая проходится по всем двенадцати пунктам сразу, и просите прогонять её не только по всему проекту разом, а по каждому новому модулю сразу после того, как он написан. Чем больше кода отдаёте на проверку за один раз, тем проще агенту что-то пропустить.

07Что ты увидишь

Было. Двенадцать разных дыр разбросаны по проекту, часть из них вы даже не подозреваете, потому что код технически работает и вроде бы всё в порядке.

Стало. Чек-лист прогоняется по каждому новому куску кода сразу после того, как он написан, а не откладывается до общего аудита перед запуском.

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

08Чтобы не споткнуться

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

Верить, что раз библиотека установилась без ошибок, значит она настоящая и безопасная. Технически код может прекрасно работать и при этом незаметно отправлять данные на сторонний сервер.

Забыть, что чек-лист не бывает одинаковым для всех проектов. У вас свой стек и свои библиотеки, поэтому общий список стоит взять за основу и попросить агента адаптировать под конкретный проект, а не использовать как есть без проверки применимости.

09А если…

А если у меня нет оплаты через вебхуки?

Пропустите пункт про подделку вебхука, он актуален только там, где есть внешняя платёжная система с асинхронным уведомлением об оплате.

А если я не могу проверить все двенадцать пунктов сразу?

Начните с блока «чужие данные»: IDOR и неправильные права доступа статистически самые частые и самые дешёвые в реализации атаки среди всех двенадцати.

А если взломщик написал мне и предлагает поговорить?

Как показывает история выше, иногда это помогает понять причину взлома быстрее, чем разбираться самостоятельно. Но рассчитывать на это как на стратегию защиты не стоит: чаще взломщик просто исчезает вместе с данными.

А если мой чек-лист для агента устарел после обновления проекта?

Пересобирайте его вместе с диагностикой: попросите агента проанализировать текущий стек заново, если он существенно изменился с прошлой проверки.

10Зачем на самом деле

Ни один из двенадцати способов не требует гениального хакера, и это одновременно и плохая, и хорошая новость. Плохая, потому что для взлома не нужен целевой интерес к вашему проекту, достаточно автоматического сканера и одной незакрытой дыры. Хорошая, потому что закрыть эти дыры тоже не требует гениальности: каждая лечится одной-двумя строчками кода, если знать, куда смотреть.

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

11А дальше

Сервер выполнит любую просьбу гостя. Даже отдать ключи от кассы разбирает механизм части этих же атак подробнее: почему они работают, а не только чем закрываются. IDOR, XSS, CSRF и SQL-инъекция из этого чек-листа разобраны там на уровне «что именно происходит внутри», с готовыми формулировками для агента.

12Источники

OWASP Top 10: https://owasp.org/www-project-top-ten/ Официальный список категорий веб-уязвимостей, где перечислены и IDOR, и SQL-инъекция, и остальные пункты этого чек-листа.

OWASP, File Upload Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html Разбор защиты от загрузки вредоносных файлов под видом обычных.

Stripe, Webhook signatures: https://docs.stripe.com/webhooks#verify-official-libraries Пример того, как платёжная система подписывает вебхуки и как эту подпись проверять на своей стороне.

Snyk: https://snyk.io/ Сервис проверки зависимостей проекта на известные уязвимости и подмену пакетов.

Исходное видео: «12 самых частых способов взломать проект вайб-кодера», youtube.com/watch?v=XDaohGikIrk Первоисточник списка двенадцати способов и личной истории про взлом 2008 года, изложенных в этом гайде своими словами.

От разбора к системе

Собрал бота. А как собрать конвейер?

Один бот закрывает одну задачу. Дальше начинается связка: n8n, Make, агенты в Claude Code и то, что крутится без тебя. Это уже не «ещё один инструмент», а система.

Что за клуб →