6 /10

DockerWakeUp

https://github.com/jelliott2021/DockerWakeUp
Нормально

Прожарка: DockerWakeUp

Оценка: 6/10

Критично

  • [⚠ МНЕНИЕ] setup-service.sh:231 – проверка кода выхода через $? вместо прямого if mycmd;. При ошибке скрипт может продолжить работу, оставив сервис в неопределённом состоянии.
  • [⚠ МНЕНИЕ] setup-service.sh:275 – переменная GIT_UP_TO_DATE объявлена, но нигде не используется; в CI‑пайплайне это приводит к лишнему шуму и потенциальному конфликту переменных окружения.
  • [⚠ МНЕНИЕ] generate‑nginx.ts:89‑90 – пользовательский ввод попадает в path.join/resolve без валидации. При специально сформированном пути возможен обход файловой системы (path traversal).
  • [⚠ МНЕНИЕ] idleShutdown.ts:19 – аналогичная уязвимость с path.join. Если путь берётся из HTTP‑запроса, злоумышленник получит доступ к произвольным файлам контейнера.
  • [✓ ФАКТ: CVE-Ищейка] Триви‑сканер обнаружил несколько HIGH‑уровневых уязвимостей в зависимостях axios, path-to-regexp и picomatch. Они включены в продакшн‑образ и могут привести к DoS или RCE при обработке внешних URL.

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

  • [⚠ МНЕНИЕ] read без -r (стр. 288, 291) – обратные слеши идущие в переменные искажаются, что усложняет отладку и может скрыть специальные символы в путях. Добавьте read -r.
  • [⚠ МНЕНИЕ] unsafe‑formatstring в generate-nginx.ts, idleShutdown.ts, wake-proxy.ts (стр. 108, 37, 49, 59, 90). Конкатенация строк в console.log и util.format усложняет поиск реальных уязвимостей; замените на шаблонные строки или передавайте параметры отдельно.
  • [⚠ МНЕНИЕ] Зависимости – обновите axios до версии ≥1.6.5, path-to-regexp до ≥6.2.2, picomatch до ≥2.3.1. При невозможности обновления зафиксируйте патч‑версии в package-lock.json.
  • [⚠ МНЕНИЕ] Docker‑образ – в репозитории отсутствует Dockerfile. Добавьте минимальный Dockerfile с HEALTHCHECK, явно указывающий пользователь node и ограничивающий права (--cap-drop ALL). Это упростит CI и повысит безопасность.

Мелочи

  • [⚠ МНЕНИЕ] В setup-service.sh переменные окружения экспортируются без readonly, что допускает их переопределение в дочерних процессах.
  • [⚠ МНЕНИЕ] В wake-proxy.ts используется console.log для вывода пользовательских данных; замените на logger.info с сериализацией.
  • [⚠ МНЕНИЕ] В README отсутствует блок “Security” – пользователи не знают, какие переменные нужно задать, а какие оставлять пустыми.
  • [⚠ МНЕНИЕ] .gitignore покрывает только node_modules; стоит добавить dist/, *.log и env/.

Что хорошо

  • [⚠ МНЕНИЕ] Структура проекта: отдельные скрипты (setup-service.sh, generate-nginx.ts, idleShutdown.ts, wake-proxy.ts) ясно разделяют задачи – инициализацию, генерацию конфигурации, тайм‑аут простоя и проксирование.
  • [⚠ МНЕНИЕ] Логика пробуждения реализована через простой HTTP‑эндпоинт, что делает сервис лёгким в интеграции с CI‑системами.
  • [⚠ МНЕНИЕ] Документация: README подробно описывает сценарий «пробуждения» Docker‑контейнера и содержит примеры использования.
  • [⚠ МНЕНИЕ] Тесты отсутствуют, но в examples/ есть рабочие сценарии, позволяющие быстро проверить функциональность без сборки.
  • [⚠ МНЕНИЕ] Код написан без избыточных абстракций – функции короткие, переменные названия (например, containerId, wakeUrl) отражают смысл.
  • [✓ ФАКТ: Баш-Прокурор] Линтеры (ShellCheck, Semgrep) уже интегрированы в репозиторий, что показывает стремление к качеству.

Вердикт

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


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

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