6
/10
Прожарка: helm‑exporter
Оценка: 6/10
Критично
- [⚠ МНЕНИЕ] Dockerfile:9 –
apk addбез фиксированных версий и без--no-cache. Это открывает путь к неожиданным обновлениям базового образа и росту образа на сотни мегабайт. - [⚠ МНЕНИЕ] Dockerfile – отсутствие
HEALTHCHECKи запуск контейнера под пользователемroot. При сбое процесс будет работать с полными привилегиями, а оркестратор не получит сигнала о живучести. - [✓ ФАКТ: CVE-Ищейка] trivy – уязвимость
CVE‑2026‑33186вgoogle.golang.org/grpc(critical). Поскольку библиотека используется в клиенте Helm, потенциальный злоумышленник может обойти авторизацию gRPC‑запросов. Требует обновления зависимости до версии ≥ 1.62.0. - [✓ ФАКТ: CVE-Ищейка] trivy –
helm.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 – отсутствие
---в начале файлов и лишние пустые строки. Не влияет на работу, но портит читаемость. - [⚠ МНЕНИЕ] Dockerfile –
LABEL 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), ✗ неверно (опровергнуто).