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