6 /10

xata

https://github.com/xataio/xata
Нормально

Прожарка: 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, строка 3apk 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), ✗ неверно (опровергнуто).

Raw Markdown Прожарить ещё