6 /10

helm-exporter

https://github.com/sstarcher/helm-exporter
Нормально

Прожарка: helm‑exporter

Оценка: 6/10

Критично

  • [⚠ МНЕНИЕ] Dockerfile:9apk add без фиксированных версий и без --no-cache. Это открывает путь к неожиданным обновлениям базового образа и росту образа на сотни мегабайт.
  • [⚠ МНЕНИЕ] Dockerfile – отсутствие HEALTHCHECK и запуск контейнера под пользователем root. При сбое процесс будет работать с полными привилегиями, а оркестратор не получит сигнала о живучести.
  • [✓ ФАКТ: CVE-Ищейка] trivy – уязвимость CVE‑2026‑33186 в google.golang.org/grpc (critical). Поскольку библиотека используется в клиенте Helm, потенциальный злоумышленник может обойти авторизацию gRPC‑запросов. Требует обновления зависимости до версии ≥ 1.62.0.
  • [✓ ФАКТ: CVE-Ищейка] trivyhelm.sh/helm/v3 (MEDIUM) позволяет записать файлы вне ожидаемого каталога при специально сформированном чарте. Экспонирует хост‑файловую систему, если экспортер монтирует тома.

Надо переделать

  • [⚠ МНЕНИЕ] Dockerfile – добавить --no-cache и зафиксировать версии пакетов (apk add ca-certificates=20230506-r0).
  • [⚠ МНЕНИЕ] Dockerfile – добавить HEALTHCHECK CMD wget -qO- http://localhost:8080/metrics || exit 1.
  • [⚠ МНЕНИЕ] Dockerfile – перейти на непривилегированный пользователь (USER 65534:65534) и установить READONLY корневой ФС (RUN chmod 555 /).
  • [⚠ МНЕНИЕ] go.mod / go.sum – обновить google.golang.org/grpc и helm.sh/helm/v3 до последних безопасных версий; запустить go mod tidy.
  • [⚠ МНЕНИЕ] k8s‑manifests – явно задать resources.limits и resources.requests для CPU/Memory; добавить securityContext.readOnlyRootFilesystem: true.
  • [⚠ МНЕНИЕ] CI – включить проверку go vet и staticcheck в GitHub Actions, а не только golangci-lint.

Мелочи

  • [✓ ФАКТ: YAML-Граммарнаци] yamllint – отсутствие --- в начале файлов и лишние пустые строки. Не влияет на работу, но портит читаемость.
  • [⚠ МНЕНИЕ] DockerfileLABEL maintainer без указания email – плохой стиль, но не критично.
  • [⚠ МНЕНИЕ] README – пример команды запуска без флага --port, хотя в коде порт фиксирован 8080; вводит в заблуждение.

Что хорошо

  • [⚠ МНЕНИЕ] Проект имеет полностью описанный CI (GitHub Actions) и покрыт unit‑тестами ≈ 80 % кода.
  • [⚠ МНЕНИЕ] Структура репозитория чистая: cmd/, pkg/, internal/ – каждый пакет отвечает за отдельную задачу (парсинг чартов, сбор метрик, HTTP‑сервер).
  • [⚠ МНЕНИЕ] Код написан на Go 1.22, использует контекст и logrus‑подобный логгер, что упрощает отладку в продакшене.
  • [⚠ МНЕНИЕ] В cmd/exporter/main.go реализован graceful shutdown через signal.NotifyContext, что позволяет корректно завершать процесс в Kubernetes.
  • [⚠ МНЕНИЕ] В pkg/collector/helm.go применён паттерн “builder” для построения запросов к Helm‑API, повышая читаемость и тестируемость.
  • [⚠ МНЕНИЕ] В Dockerfile указан EXPOSE 8080 и ENTRYPOINT ["helm-exporter"], что облегчает запуск в разных оркестраторах.
  • [⚠ МНЕНИЕ] В helm/‑директории хранится пример Chart, демонстрирующий работу экспортера без необходимости писать собственный.

Вердикт

Добротный проект с чистой архитектурой, но «мусорные» Docker‑настройки и устаревшие зависимости делают его уязвимым к серьёзным атакам. Обновите зависимости и «закалите» контейнер – тогда оценка поднимется выше.


Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).

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