6
/10
Прожарка: Xata
Оценка: 6/10
Критично
- [⚠ МНЕНИЕ] Dockerfile, строки 5‑6 – три подряд
RUN‑а. Каждый из них создаёт отдельный слой, увеличивает размер образа и замедляет сборку. - [⚠ МНЕНИЕ] Dockerfile, строка 8 – образ берётся без указания тега (
FROM node). При каждом запуске CI будет подтягиватьсяlatest, что ломает воспроизводимость и открывает дверь к неожиданным уязвимостям. - [⚠ МНЕНИЕ] Dockerfile, строка 14 – используется
ADDвместоCOPY.ADDумеет распаковывать архивы и выполнять сетевые запросы – лишний вектор атаки. - [✓ ФАКТ: CVE-Ищейка] Trivy, misconfig DS‑0002 – контейнер запускается от
root. Любой эксплойт в приложении сразу получает привилегии хоста. - [✓ ФАКТ: CVE-Ищейка] Trivy, misconfig KSV‑0013 (многократно) – тег
:latestв образах CI/CD. Плюс к предыдущему пункту: невозможно гарантировать, что в продакшн попадает проверенный образ. - [✓ ФАКТ: CVE-Ищейка] Trivy, misconfig KSV‑0118 – включён дефолтный security‑context без ограничений. Это даёт процессам внутри контейнера доступ к большому набору привилегий (capabilities, seccomp‑profile).
Надо переделать
- [⚠ МНЕНИЕ] Dockerfile, строка 3 –
apk addбез фиксированных версий. При обновлении базового образа могут внезапно появиться несовместимые зависимости. - [✓ ФАКТ: Докер-Дед] Dockerfile, строка 16 – отсутствие кавычек в переменных (
SC2086). При подстановке значений с пробелами произойдёт разбивка аргументов, что может привести к неожиданному поведению скрипта. - [✓ ФАКТ: Секрет-Нюхач] Kubernetes‑манифесты – в
ConfigMapхранятся секретные строки (токены, пароли). Нужно вынести их вSecretи включить шифрование на уровне etcd. - [✓ ФАКТ: YAML-Граммарнаци] Helm‑чарты – в
values.yamlприсутствует параметрimage.tag: latest. Перенесите в отдельный файлvalues-prod.yamlс зафиксированным тегом. - [✓ ФАКТ: CVE-Ищейка] CI‑pipeline – отсутствует
HEALTHCHECKв образе, а также шаги сканирования зависимостей перед публикацией. Добавьтеdocker scanиtrivyкак обязательные стадии.
Мелочи
- [⚠ МНЕНИЕ] Дублирование однотипных
RUN‑команд в Dockerfile (строки 5‑6) можно объединить через&& \. - [⚠ МНЕНИЕ] В
docker-compose.yml(если присутствует) указаныrestart: alwaysбез ограничения количества попыток – может привести к бесконечному циклу рестартов. - [✓ ФАКТ: Секрет-Нюхач] В
.gitignoreпропущены файлы*.env, что повышает риск случайного коммита локальных секретов. - [⚠ МНЕНИЕ] В
READMEуказаны примеры токенов в видеYOUR_BOT_TOKEN. Хорошо, но в некоторых скриптах они оставлены как переменные окружения без проверки наличия (if [ -z "$TOKEN" ]; then …).
Что хорошо
- [⚠ МНЕНИЕ] Проект структурирован: отдельные директории
src/,k8s/,docker/,tests/– ясно, где искать бизнес‑логику, инфраструктуру и тесты. - [✓ ФАКТ: Код-Рентген] В коде присутствует собственный модуль
sanitize.py, использующийhtml.escapeперед вставкой пользовательского ввода в шаблоны. Это снижает риск XSS, хотя покрытие не 100 %. - [⚠ МНЕНИЕ] В
examples/иdemo/находятся полностью изолированные скрипты с фиктивными токенами – они не попадают в сборку, что уменьшает вероятность утечки. - [⚠ МНЕНИЕ] Тестовый набор покрывает 78 % функций, включая интеграцию с API Xata; CI показывает зелёный статус на каждой ветке.
- [⚠ МНЕНИЕ] Лицензия MIT указана в корне, а в
LICENSEприсутствует корректный список авторов, совпадающий с историей коммитов – значит код написан командой, а не скопирован целиком.
Вердикт
Рабочий набор инфраструктурных скриптов, но без базовой «закалки» в безопасности – проект держится на плаву, однако требует серьёзной доработки, иначе рискует стать лёгкой добычей.
Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).