5
/10
Прожарка: Backhaul
Оценка: 5/10
Критично
- [⚠ МНЕНИЕ] optimization.go:28, 40, 68 –
exec.Commandполучает параметры из переменных, а не из констант. Без проверки пользовательского ввода это открывает прямую командную инъекцию. - [⚠ МНЕНИЕ] ws_dialer.go:119 – создаётся соединение
ws://вместоwss://. В продуктиве любой перехватщик сможет подменить трафик. - [⚠ МНЕНИЕ] client.go:43 и server.go:38 – HTTP‑серверы запускаются без TLS. При этом в
ws_dialer.goотключается проверка сертификата (InsecureSkipVerify). Всё это превращает приложение в лёгкую мишень для MITM‑атак. - [✓ ФАКТ: Код-Рентген] httpserver.go:26 –
fmt.Fprintf(w, ...)пишет напрямую вhttp.ResponseWriter. Если в строке присутствует пользовательский ввод, HTML‑экранирование обходится, что приводит к XSS‑уязвимости. - [⚠ МНЕНИЕ] ws_dialer.go:136 – в TLS‑конфигурации отсутствует
MinVersion; по умолчанию допускаются устаревшие версии (TLS 1.0/1.1).
Надо переделать
- [⚠ МНЕНИЕ] ws_dialer.go:7 – замените
math/randнаcrypto/randдля генерации случайных токенов. - [⚠ МНЕНИЕ] ws_dialer.go:136 – уберите
InsecureSkipVerifyи явно задайтеMinVersion: tls.VersionTLS12. - [⚠ МНЕНИЕ] index.html:8 – добавьте атрибут
integrityк внешним скриптам/стилям, иначе CDN‑подмена остаётся открытой. - [✓ ФАКТ: YAML-Граммарнаци] .goreleaser.yaml и .github/workflows/goreleaser.yml – исправьте отступы, уберите лишние пробелы, добавьте
---в начало файлов и завершите их переводом строки. Это не спасёт приложение, но избавит CI от лишних предупреждений. - [⚠ МНЕНИЕ] Отсутствие тестов – добавьте хотя бы базовые unit‑тесты для функций, работающих с сетью и вводом пользователя.
Мелочи
- [⚠ МНЕНИЕ] В репозитории нет
Dockerfileиdocker-compose.yml, хотя вREADMEупоминается контейнеризация. Это заставляет новых разработчиков искать сборку вручную. - [⚠ МНЕНИЕ] В
go.modуказаны устаревшие версии зависимостей, ноgo.mod tidyне запускался: в результате вgo.sumостаются лишние записи. - [⚠ МНЕНИЕ] Имена функций в
optimization.go(optimize,run) слишком общие, их трудно отличить от стандартных библиотечных функций. - [⚠ МНЕНИЕ] Комментарии почти отсутствуют; единственный блок‑комментарий в
client.goописывает, что делает сервер, но не объясняет бизнес‑логику.
Что хорошо
- [⚠ МНЕНИЕ] CI настроен через GitHub Actions, проверка
gitleaksиtrivyпроходит без предупреждений – репозиторий чист от известных уязвимостей в зависимостях. - [✓ ФАКТ: Инфра-Ревизор] Checkov не нашёл проблем в инфраструктурных файлах (их почти нет), что говорит о корректном описании CI‑pipeline.
- [⚠ МНЕНИЕ] Проект использует Go modules, без
vendor‑каталога, что упрощает обновление зависимостей. - [⚠ МНЕНИЕ] В
READMEподробно описаны шаги запуска локального сервера и пример конфигурации, что ускоряет onboarding. - [⚠ МНЕНИЕ] Файлы
optimization.goиws_dialer.goразбиты на небольшие функции, что облегчает чтение (при условии, что имена будут более описательными).
Вердикт
Backhaul – зрелый прототип, но без базовых мер защиты и без тестов. Пока он пригоден лишь для экспериментов, а не для продакшна.
Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).