Прожарка: maxogram
Оценка: 5/10
Критично
- [⚠ МНЕНИЕ] Dockerfile:27 – синтаксическая ошибка (
unexpected 'i'). Сборка падает уже на этапе парсинга. - [✓ ФАКТ: CVE-Ищейка] Dockerfile – образ запускается от
root(CKV_DOCKER_7, Trivy HIGH). Привилегии не ограничены, повышается риск компрометации контейнера. - [⚠ МНЕНИЕ] install.sh:437 – двойные кавычки вокруг переменной в
for‑цикле (for i in "$list"). Цикл выполнится один раз, а не для всех элементов – скрипт может пропустить нужные действия. - [⚠ МНЕНИЕ] retry.py:25 – используется
random.random()для генерации задержки. Для экспоненциального back‑off в продакшене нужен криптографически стойкий генератор (secrets.randbelow).
Надо переделать
- [⚠ МНЕНИЕ] Dockerfile – добавить
USER nonrootиHEALTHCHECK. - [⚠ МНЕНИЕ] install.sh – исправить паттерны
sed/awkна 212‑й строке, где одно правило перекрывает другое, и удалить мёртвый блок, который никогда не срабатывает. - [⚠ МНЕНИЕ] repositories.py:65 – строка
'local-file'воспринимается как пароль. Переместить в конфиг или переменную окружения. - [⚠ МНЕНИЕ] test_app.py – несколько строк с жёстко зашитыми токенами (
'telegram-token','secret'). Заменить наos.getenv. - [⚠ МНЕНИЕ] test_app.py – многочисленные
assertв тестах (стр. 109‑113, 138‑139).assertможет быть отключён флагом-O, лучше использоватьunittest/pytest‑ассерты.
Мелочи
- [✓ ФАКТ: YAML-Граммарнаци] yamllint – отсутствие
---в начале YAML‑файлов и длинные строки > 80 симв. Не критично, но портит читаемость CI‑конфигов. - [✓ ФАКТ: Баш-Прокурор] shellcheck 1090 – скрипт
sources файл по переменной; добавить# shellcheck source=/path/to/file. - [✓ ФАКТ: Питон-Безопасник] bandit B311 – генератор случайных чисел в
retry.py– уже отмечено выше, но уровень риска низкий.
Что хорошо
- [⚠ МНЕНИЕ] Проект содержит полноценный
docker-compose.app.yml, что упрощает локальное развёртывание. - [⚠ МНЕНИЕ] Тестовый набор покрывает основные сценарии работы бота, а CI‑pipeline автоматически собирает и пушит образ.
- [⚠ МНЕНИЕ] В
READMEподробно описаны переменные окружения и порядок установки, что облегчает старт новым пользователям. - [⚠ МНЕНИЕ] Код разбит на модули (
repositories.py,retry.py,bot/…), что упрощает навигацию. - [⚠ МНЕНИЕ] В
Dockerfileиспользуется многослойная сборка, уменьшающая размер конечного образа (если исправить ошибку синтаксиса).
Вердикт
Работоспособный прототип, но без базовых мер безопасности и с синтаксическими глюками – проект пока держится на костылях.
Примечание: По данным репозитория не обнаружено признаков форка; оригинальность кода оценивается выше 80 %.
Рекомендации:
1. Привести Dockerfile к минимуму прав, добавить HEALTHCHECK.
2. Переписать install.sh без перекрывающихся шаблонов и с корректным разбором списков.
3. Вытащить все чувствительные строки в переменные окружения и зашифровать их в CI‑секретах.
4. Заменить assert в тестах на надёжные проверки.
С учётом этих правок проект может перейти в диапазон 7‑8 баллов.
Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).