6 /10

wacli

https://github.com/openclaw/wacli
Нормально

Прожарка: wacli

Оценка: 6/10

Критично

  • [⚠ МНЕНИЕ] Dockerfile — строки 4, 13apk add без указания версии. При обновлении базового образа контейнер может «разорваться» из‑за несовместимых пакетов.
  • [✓ ФАКТ: CVE-Ищейка] Dockerfile — отсутствие HEALTHCHECK (Trivy DS‑0026). Оркестратор не будет знать, когда контейнер перестал отвечать, и может бесконечно рестартовать его.
  • [✓ ФАКТ: Инфра-Ревизор] Checkov — CKV_DOCKER_2 (файл Dockerfile). Образ собирается от имени root, что открывает путь к привилегированному выполнению внутри контейнера.
  • [✓ ФАКТ: Код-Рентген] Semgrep — run‑shell‑injection (файл .github/actions/setup-ci-env/action.yml, строка 52). Переменная ${{ github.* }} подставляется в run: без экранирования – потенциальный шанс выполнить произвольный шелл в CI.
  • [✓ ФАКТ: YAML-Граммарнаци] Yamllint — длинные строки (например, ci.yml строки 57, 67, 78 > 80 симв.). Такие строки ухудшают читаемость и могут привести к ошибкам при копировании‑вставке.

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

  • [⚠ МНЕНИЕ] Версионирование пакетов – укажите точные версии в apk add (например, apk add git=2.42.0-r0).
  • [⚠ МНЕНИЕ] Добавьте HEALTHCHECK – проверка curl -f http://localhost:8080/health || exit 1 спасёт от «зависших» подов.
  • [⚠ МНЕНИЕ] Перейдите на непривилегированного пользователя – создайте USER appuser и задайте нужные права в контейнере.
  • [⚠ МНЕНИЕ] Экранируйте переменные в GitHub Actions – используйте ${{ toJSON(github) }} или явно задавайте безопасные значения.
  • [✓ ФАКТ: YAML-Граммарнаци] Приведите YAML‑файлы к единому стилю – добавьте --- в начало, поправьте отступы перед комментариями, сократите строки до 80 символов.

Мелочи

  • [⚠ МНЕНИЕ] В Dockerfile используется CGO_ENABLED=1, но в большинстве файлов CGO не нужен – можно собрать без него, уменьшив размер образа.
  • [⚠ МНЕНИЕ] Файлы *_test.go разбросаны по всему дереву; их можно собрать в отдельный каталог tests/ для чистоты.
  • [⚠ МНЕНИЕ] Некоторые файлы (cgo_required.go, store_cleanup.go) содержат только заглушки, их стоит удалить или добавить реальную реализацию.
  • [⚠ МНЕНИЕ] В go.mod указана версия Go 1.25, но CI использует golang:1.25-alpine; стоит зафиксировать образ в CI, иначе при смене тега образ может «сломаться».

Что хорошо

  • [⚠ МНЕНИЕ] Полный набор CLI‑команд – от отправки сообщений до управления группами, покрытый тестами (≈ 150 юнит‑тестов).
  • [⚠ МНЕНИЕ] Тестовое покрытие – почти каждый публичный метод имеет соответствующий *_test.go.
  • [⚠ МНЕНИЕ] Структурированность кода – отдельные пакеты cmd/wacli и internal/wa чётко разделяют уровень интерфейса и бизнес‑логику.
  • [⚠ МНЕНИЕ] Использование go:embeddocs.go) для включения справки без внешних файлов.
  • [✓ ФАКТ: Докер-Дед] Линтеры уже настроены: hadolint, yamllint, semgrep – их вывод виден в CI, что упрощает поддержание качества.

Вердикт

Добротный проект, но «скрепки» от оригинальности и несколько грубых уязвимостей в Docker‑образе держат его на уровне «можно, но требует доработки».


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

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