Прожарка: hass‑addon‑frp‑client
Оценка: 5/10
Критично
- [⚠ МНЕНИЕ] Dockerfile:2 – образ берётся без указания тега (
FROM alpine). При каждом билде будет скачиваться «latest», что ломает воспроизводимость и открывает путь к неожиданным уязвимостям. - [✓ ФАКТ: CVE-Ищейка] Dockerfile:16 – отсутствие директивы
USER. Контейнер работает подroot, что отмечено Trivy (HIGH) и Checkov (CKV_DOCKER_7). Это прямой риск привилегированного выполнения. - [⚠ МНЕНИЕ] run.sh:27 –
cdбез проверки статуса. Если каталог недоступен, скрипт продолжит работу в неправильном каталоге, что может привести к ошибкам при запуске FRP‑клиента.
Надо переделать
- [⚠ МНЕНИЕ] Dockerfile:12‑14 – три подряд
RUN‑команды. Их следует объединить в один слой, чтобы уменьшить размер образа и ускорить кеширование. - [⚠ МНЕНИЕ] bootstrap.sh:33, 37 – объявление и присваивание переменных в одной строке маскирует код возврата. Разделите
declare varиvar=.... - [⚠ МНЕНИЕ] bootstrap.sh:37 – используется устаревший способ замены (
${var//search/replace}предпочтительнее). - [⚠ МНЕНИЕ] bootstrap.sh:37‑47 – почти все строки без кавычек. Это открывает возможность непреднамеренного разбора слов и подстановки глобов. Обрамляйте переменные двойными кавычками.
Мелочи
- [✓ ФАКТ: YAML-Граммарнаци] yamllint – в
repository.yamlиfrp-client/config.yamlотсутствует---. Не критично, но портит читаемость. - [✓ ФАКТ: YAML-Граммарнаци] config.yaml – одна строка превышает 80 символов (107). Обрежьте или перенесите параметры.
- [⚠ МНЕНИЕ] README – нет раздела «Installation», только ссылка на репозиторий. Пользователю придётся гадать, какие переменные нужны.
Что хорошо
- [⚠ МНЕНИЕ] Лицензия присутствует, что упрощает юридический аудит.
- [⚠ МНЕНИЕ] Dockerfile использует небольшую базу (Alpine), что экономит место и ускоряет старт.
- [⚠ МНЕНИЕ] bootstrap.sh и run.sh разбиты на отдельные скрипты, что облегчает локальное тестирование.
- [⚠ МНЕНИЕ] Отсутствие gitleaks‑индикаторов – в репозитории нет случайно закоммиченных токенов или паролей.
- [✓ ФАКТ: Код-Рентген] Semgrep нашёл только одну проблему (отсутствие USER), значит остальные части кода не содержат очевидных уязвимостей.
- [✓ ФАКТ: Код-Рентген] Отсутствие innerHTML, eval и редиректов – в проекте нет веб‑компонентов, поэтому XSS‑рисков нет.
Вердикт
Проект выглядит как быстрый набор скриптов‑обёрток над FRP‑клиентом: идея полезна, но реализация оставляет желать лучшего – в Dockerfile и оболочечных скриптах слишком много базовых ошибок, а архитектура почти не имеет слоёв абстракции. Требуется доработать безопасность и стилистические детали, иначе образ будет «хрупким» в продакшене.
Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).