Этот репозиторий существует для хранения дополнительных материалов с доклада на тему "Сможет ли вайб-кодинг пройти SSDLC?"
К нему прилагается 5 кодовых баз одного и того же веб-приложения, написанных разными LLM-моделями:
- https://github.com/WDN2010/grok-vibecode
- https://github.com/WDN2010/gemini-vibecode
- https://github.com/WDN2010/deepseek-vibecode
- https://github.com/WDN2010/claude-vibecode
- https://github.com/WDN2010/gpt5-vibecode
У каждого репозитория есть 2 ветки: main отображает состояние приложения после первичной разработки, fixed предлагает к ознакомлению версию приложения после работы над найденными проблемами безопасности
Кроме того, для каждого репозитория собраны SBOM-файлы для frontend (JavaScript/TypeScript) и backend (Python) компонентов приложения. Возможно, Grok собирал их некорректно, потому что разница в перечнях компонентов до/после очень странная, в остальном я следил за тем, чтобы сканеры собирали зависимости специальными инструментами под языки (см. Dockerfile'ы в репозиториях проектов) и не лезли менять содержимое SBOM файлов самовольно
В этом репозитории можно ознакомиться с "сырыми" отчётами от сканеров по результатам сканирования, а также с summary этих отчётов по мнению LLM-моделей, которые сами же и писали приложение - также в двух итерациях, до и после фиксов безопасности
В отчётах о сканерах упоминаются High/Medium уязвимости, которых нет в "сырых отчётах". Это сработки от неназванного на презентации Enterprise SAST сканера. По большей части, реального импакта эти сработки не дали (по крайней мере, в финальных отчётах, где все уязвимости были False Positive, либо смитигированы)
Большинство моделей было использовано в рамках подписки Cursor Pro, поэтому есть возможность просто предоставить выгрузку с небольшими итогами и минимальными комментариями в виде файла Cursor stats volgactf.xls в репозитории проекта.
Для DeepSeek был использован персональный API-токен. Данные по использованию токена в дни, когда он модель применялась при подготовке к докладу, отображены скриншотами в папке Deepseek_API_cost_screens
| LLM Model | Critical | High | Medium | Low | Total |
|---|---|---|---|---|---|
| Claude | 2 | 11 | 13 | 2 | 28 |
| DeepSeek | 2 | 10 | 16 | 2 | 30 |
| 0 | 6 | 7 | 0 | 13 | |
| GPT | 1 | 5 | 12 | 0 | 18 |
| Grok | 2 | 17 | 21 | 3 | 43 |
| LLM Model | Critical | High | Medium | Low | Total |
|---|---|---|---|---|---|
| Claude | 0 | 4 | 0 | 2 | 6 |
| DeepSeek | 0 | 6 | 13 | 0 | 19 |
| 0 | 1 | 7 | 0 | 8 | |
| GPT | 1 | 3 | 4 | 2 | 10 |
| Grok | 2 | 8 | 18 | 0 | 28 |
| LLM Model | Critical | High | Medium | Low | Total | Комментарий |
|---|---|---|---|---|---|---|
| Claude | 0 | 0 | 0 | 4 | 4 | Claude сказал про 4 low, но реально обозначил только root в контейнере (причем как low) Остальные high указал как смитигированные (и в чём неправ?) Секреты - FP (так и есть) |
| DeepSeek | 0 | 0 | 1 | 0 | 1 | Убрав то, что DeepSeek посчитал как FP, получаем оставшийся не read-only на базу данных Забил на компоненты? |
| 0 | 0 | 0 | 0 | 0 | Alembic RCE и bind на 0.0.0.0 посчитал как фолсы забыл про jinja2@3.1.3? |
|
| GPT | 0 | 1 | 0 | 0 | 1 | GPT считает не read-only БД фолсой High - это root в контейнере Забил на крит в компонентах? |
| Grok | 2 | 3 | 16 | 0 | 21 | 🥴🥴🥴 |
| LLM Model | Critical | High | Medium | Low | Total | Комментарий |
|---|---|---|---|---|---|---|
| Claude | 0 | 1 | 0 | 0 | 1 | root в контейнере не отпускаем! |
| DeepSeek | 0 | 2 | 1 | 2 | 5 | Добавил SCA Посчитал вывод логов на фронте за Low Посчитал read-only на БД как Low |
| 0 | 0 | 1 | 0 | 1 | Хочется запросить фикс Jinja | |
| GPT | 1 | 1 | 1 | 2 | 5 | Добавил SCA Посчитал read-only на БД как Low |