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