Files
portal/docs/security/infosec-vet.md
T
Дмитрий 1933129497 docs(security): replace Enlightn (#70) with Ward per IS9 vet + L13
Enlightn abandoned (Packagist) + no Laravel 13 support. User chose to find
a replacement. Ward (Eljakani/ward, Go, MIT, 316★) — same niche, Go binary
so no Laravel-version dependency. infosec-vet.md §ПЕРЕСМОТР #70 + spec/plan
amendment notes. Node #70 keeps number/niche; tool + type change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 14:32:49 +03:00

28 KiB
Raw Blame History

Провенанс-вет внешних инструментов A8 infosec-tooling (IS9)

Дата: 2026-05-21 Вет-код: IS9 (согласно ADR-003 + spec §8) Инструменты: #68 OWASP ZAP MCP, #69 Nuclei MCP, #70 Enlightn Статус: ЗАВЕРШЁН


Назначение документа

Перед установкой любого внешнего инструмента в раздел A8 «Информационная безопасность» выполнен обязательный провенанс-вет (IS9). Основание: ~13 % security-скилов из маркетплейсов несут критичные дефекты, часть пытается красть учётные данные (исследование ToxicSkills, Snyk + SentinelOne 2025). ADR-003 закрепляет принцип: community-инструменты с непроверенным происхождением — defer (именно так были отложены «Claude Code Canary» и «Plugin Security Auditor» в D3).

Документ является артефактом IS9 и читается в Tasks 2–4 плана как единственный авторитетный источник «какой репозиторий/версию устанавливать».


Методология вета

Для каждого инструмента:

  1. Прочитан README + ключевые исходники через GitHub API / WebFetch (факты, не память).
  2. Проверены: репозиторий, владелец/организация, лицензия, звёзды, активность коммитов, дата последнего релиза.
  3. Оценено: что инструмент исполняет (методы, сетевые вызовы, телеметрия, аутентификация).
  4. Для кандидатов с неприемлемым провенансом — зафиксирована причина отклонения.

Все данные получены из GitHub API (gh api) и WebFetch на дату 2026-05-21. Ссылки указывают на конкретные SHA/теги там, где пин-версия зафиксирована.


#68 — OWASP ZAP MCP (слот DAST)

Кандидат A: официальный ZAP «MCP Integration» add-on

Репозиторий: zaproxy/zap-extensions (org: zaproxy, Apache-2.0) Родительский проект: zaproxy/zaproxy — OWASP ZAP by Checkmarx

Параметр Значение
Владелец Организация zaproxy (OWASP-проект, под управлением Checkmarx с 2022)
Лицензия Apache-2.0
Звёзды (zaproxy/zaproxy) 15 152 (2026-05-21)
Последний коммит в zaproxy 2026-05-20 (вчера)
Статус add-on MCP v0.1.0, alpha, опубликован 2026-04-02
Релиз zap-extensions непрерывный (20.05.2026 — webdriver-related releases, 08.05.2026 — automation-v0.60.0)

Что исполняет (код прочитан):

Источники: addOns/mcp/src/main/java/org/zaproxy/addon/mcp/tools/

Add-on экспонирует 15 MCP-инструментов, все — обращения к локальному ZAP-инстансу по API:

  • ZapStartScanTool, ZapStartActiveScanTool, ZapStartSpiderTool, ZapStartAjaxSpiderTool — запускают сканирование указанного URL.
  • ZapGetActiveScanStatusTool, ZapGetPassiveScanStatusTool, ZapGetSpiderStatusTool, ZapGetAjaxSpiderStatusTool — читают статус.
  • ZapStopActiveScanTool, ZapStopAjaxSpiderTool, ZapStopSpiderTool — останавливают сканирование.
  • ZapCreateContextTool — создаёт контекст сканирования.
  • ZapGenerateReportTool — генерирует отчёт.
  • ZapInfoTool, ZapVersionTool — информационные.

Весь трафик идёт только к локальному ZAP-инстансу (ZAP API). Никаких внешних URL, токенов или телеметрии в исходниках нет. Это add-on к самому ZAP — не standalone-сервер.

Особенности:

  • Статус «alpha» (v0.1.0) — API будет меняться. Официальный блог-пост Simon Bennetts (автора ZAP) от 02.04.2026 предупреждает: «alpha release».
  • Устанавливается как ZAP add-on через Marketplace ZAP, не как отдельный MCP-сервер.
  • Требует запущенного ZAP-демона (zaproxy -daemon -port 8080 -config api.key=<key>).
  • Конфигурация .mcp.json будет направлять Claude к локальному ZAP API (не к внешнему сервису).

Провенанс-вывод: Провенанс МАКСИМАЛЬНО ЧИСТЫЙ. OWASP + Checkmarx — индустриально признанный security-проект с 15 000+ звёзд и непрерывной активностью. Add-on разработан теми же людьми что и сам ZAP. Код исполняет ТОЛЬКО локальные ZAP API-вызовы.


Кандидат B: dtkmn/mcp-zap-server

Параметр Значение
Владелец dtkmn — физическое лицо (Daniel Tse, см. ссылки в README на danieltse.org)
Лицензия Apache-2.0
Звёзды 54 (2026-05-21)
Последний коммит 2026-05-21 (вчера), v0.8.0 от 10.05.2026
Стек Java / Spring Boot + Docker Compose

Что исполняет (README прочитан):

  • Отдельный Spring Boot–сервис (Docker Compose), обёртывающий ZAP через HTTP.
  • Запускается через ./dev.sh → Docker Compose стек (ZAP + Spring Boot + Open WebUI + Juice Shop + Petstore).
  • MCP-endpoint: http://localhost:7456/mcp.
  • Требует Docker — несовместимо с native-Windows без Docker Desktop/WSL2. Проект использует native-Windows без Docker (strategy: project_phase1_strategy.md).
  • README явно: «This project is not affiliated with or endorsed by OWASP or the OWASP ZAP project».
  • Ряд коммитов вида «docs: add sponsorship information to README» (3 из 5 последних), 6 открытых issues.

Провенанс-вывод: Один разработчик, не аффилирован с OWASP, требует Docker. Для нашего native-Windows стека технически несовместим. Дополнительно: провенанс значительно слабее кандидата A.


Решение для #68

ПРИНЯТ Кандидат A — официальный ZAP MCP add-on (zaproxy/zap-extensions, addOns/mcp)

Поле Значение
Источник zaproxy/zap-extensions, путь addOns/mcp/
Текущая версия v0.1.0 (alpha), выпущен 2026-04-02
Pin add-on устанавливается через ZAP Marketplace — pin по текущей версии в .zap/ конфиге
Лицензия Apache-2.0
Ограничение alpha-статус: API ещё нестабильно; задокументировать в docs/security/zap-setup.md
Кандидат B ОТКЛОНЁН (Docker-зависимость несовместима с native-Windows; провенанс слабее)

#69 — Nuclei MCP (слот широкого сканирования)

Движок: projectdiscovery/nuclei

Параметр Значение
Владелец Организация projectdiscovery (специализированная security-компания)
Лицензия MIT
Звёзды 28 777 (2026-05-21)
Последний коммит 2026-05-20
Последний релиз v3.8.0 от 2026-04-18
Телеметрия Нет по умолчанию; -dashboard флаг для опциональной загрузки результатов в PD Cloud — не активируем

Движок — чистый провенанс. MIT, активно разрабатывается, 28k+ звёзд.


Кандидат A: cyproxio/mcp-for-security (nuclei-mcp)

Параметр Значение
Владелец cyproxio — организация, но...
Статус DEPRECATED — последний коммит 2026-03-30 с сообщением «deprecate: migrate to Bolt. This repository is no longer actively maintained»
Лицензия MIT
Звёзды 611

Провенанс-вывод: Репозиторий официально заброшен автором 30.03.2026. Устанавливать депрекированный wrapper-сервер в раздел безопасности — нарушение принципа ADR-003 («community-инструменты с непроверенным происхождением — defer»). ОТКЛОНЁН.


Кандидат B: addcontent/nuclei-mcp

Параметр Значение
Владелец addcontent — физическое лицо, 34 публичных репозитория, аккаунт создан 2020-01-11, bio/company/location не заполнены
Лицензия MIT
Звёзды 47 (2026-05-21)
Последний коммит 2025-08-04 (~9 месяцев назад)
Последний релиз v0.1.0 (alpha), 2025-08-04

Анализ кода (прочитан go.mod + README):

  • Зависит от projectdiscovery/nuclei/v3 v3.4.7 (не самая свежая, v3.8.0 вышла в апреле 2026).
  • README содержит placeholder github.com/your-org/nuclei-mcp в Install-инструкциях — признак того, что репозиторий собран по шаблону и не дорабатывался.
  • Владелец анонимен: нет bio, нет company, нет location, нет признаков профессиональной security-деятельности.
  • Последняя активность — 9 месяцев назад (alpha-статус, неполный README).

Провенанс-вывод: Анонимный владелец + заброшенный (9 месяцев без активности) + остатки placeholder-текста в README = непрозрачный провенанс. ОТКЛОНЁН по критерию ADR-003.


Решение для #69: собственная тонкая обвязка (self-authored wrapper)

Оба сторонних wrapper'а отклонены (один — deprecated, другой — анонимный/заброшенный). Движок projectdiscovery/nuclei (MIT, 28k+ звёзд) — чистый. Доступен как Go-бинарь nuclei.exe.

Решение: Запускать nuclei.exe напрямую через тонкую self-authored обвязку в .mcp.json — простой command/args MCP-блок, вызывающий бинарь с нужными флагами. Этот подход:

  • Минимизирует attack surface (нет чужого обёрточного кода между Claude и nuclei.exe).
  • Является стандартной практикой для CLI-инструментов без готового MCP-сервера.
  • Не требует установки дополнительного npm/go-пакета.
  • Nuclei.exe — чистый MIT-бинарь от projectdiscovery (известная security-компания).
Поле Значение
Источник движка projectdiscovery/nuclei, релиз v3.8.0
URL https://github.com/projectdiscovery/nuclei/releases/tag/v3.8.0
Pin v3.8.0 (Windows бинарь: nuclei_3.8.0_windows_amd64.zip)
Лицензия MIT
Wrapper Self-authored (.mcp.json блок с command: "nuclei.exe", args: [...])
Оба кандидата-wrapper ОТКЛОНЕНЫ (deprecated / анонимный провенанс)

#70 — Enlightn (слот Laravel security-конфигурации)

enlightn/enlightn

Параметр Значение
Владелец Организация enlightn (Enlightn Software, Paras Malhotra)
Лицензия LGPL-3.0 (основной пакет), MIT (security-checker sub-dep)
Звёзды 987 (2026-05-21)
Последний релиз v2.10.0 от 2024-04-05 (~13 месяцев назад)
Последний коммит 2024-04-05 (~13 месяцев без коммитов)
Статус на Packagist «abandoned and no longer maintained»

Что проверяет (код прочитан, Security-анализаторы):

22 Security-анализатора в src/Analyzers/Security/:

  • AppDebugAnalyzer.php — APP_DEBUG не включён в продакшне
  • AppKeyAnalyzer.php — APP_KEY установлен
  • CSRFAnalyzer.php — CSRF-защита активна
  • EncryptedCookiesAnalyzer.php — куки зашифрованы
  • HSTSHeaderAnalyzer.php — HSTS-заголовок установлен
  • HttpOnlyCookieAnalyzer.php — HttpOnly flag на куках
  • LoginThrottlingAnalyzer.php — rate-limit на форме входа
  • MassAssignmentAnalyzer.php — защита от mass-assignment
  • XSSAnalyzer.php — XSS-защита
  • FilePermissionsAnalyzer.php, PHPIniAnalyzer.php, EnvAccessAnalyzer.php
  • VulnerableDependencyAnalyzer.php — CVE в зависимостях
  • FrontendVulnerableDependencyAnalyzer.php — CVE во frontend-зависимостях
  • И другие (FillableForeignKey, HashingStrength, UnguardedModels и пр.)

Плюс 19 Performance + 29 Reliability анализаторов (итого 70 в OSS; README заявляет «66» — расхождение несущественно).

Телеметрия: Пакет использует guzzlehttp/guzzle — HTTP-клиент. Sub-dep enlightn/security-checker (MIT) обращается к Security Advisories Database для получения актуальных данных CVE (кэширует локально). Это не телеметрия, а функциональный запрос (как Dependabot). Запрос ограничен базой advisory-данных, не содержит идентификаторов проекта. Outbound: ТОЛЬКО к advisory-db.

Критическое ограничение — совместимость с Laravel 13:

composer.json объявляет "laravel/framework": "^9.0|^10.0|^11.0". Laravel 13 вне объявленного диапазона.

  • PR на Laravel 12 (#200, открыт 2025-02-17) — не смержен спустя 3 месяца активных просьб.
  • Мейнтейнер не отвечает на issues и PR — множественные жалобы пользователей.
  • Packagist: пакет помечен «abandoned».
  • Последний коммит: 2024-04-05. Laravel 13 вышел в 2025.

Обходной путь: Composer позволяет установить с --ignore-platform-reqs или через форк. Существуют unofficial forks (напр. ivqonsanada/enlightn, exin/enlightn), но их провенанс — частные лица без верификации.

Провенанс самого пакета: Достаточный. Enlightn Software — реальная компания, Paras Malhotra — публичная личность, пакет с 987 звёздами и 3+ млн установок. Провенанс ПРИНЯТ.

Но функциональность заблокирована: несовместимость с Laravel 13 — технический блок.


Решение для #70

ПРИНЯТ С БЛОКЕРОМ — enlightn/enlightn v2.10.0, с условием по Laravel 13

Поле Значение
Источник enlightn/enlightn
Pin-версия v2.10.0 (последний стабильный)
Лицензия LGPL-3.0 (совместима с проприетарным использованием)
Телеметрия Нет; security-checker делает outbound к advisory-db (только CVE-данные)
Провенанс Принят (Enlightn Software, публичный мейнтейнер)
Блокер composer.json ограничивает laravel/framework ^9|^10|^11 — Laravel 13 НЕ входит
Путь установки composer require enlightn/enlightn --dev --ignore-platform-reqs ИЛИ переключиться на форк exin/enlightn (Task 4 spike)
Альтернативные форки ivqonsanada/enlightn, exin/enlightn — оба неверифицированы; провенанс NOT VETTED
Рекомендация Task 4 — проверить --ignore-platform-reqs на реальной установке; если не работает — оценить форк или принять ограниченный subset работающих проверок

Примечание для Task 4: Несмотря на объявленный диапазон, многие Laravel-пакеты фактически работают на версиях выше заявленного (особенно если Laravel 13 является minor evolution от 11). Задача Task 4 — подтвердить эмпирически. Если установка и php artisan enlightn работают — блокер снимается практически. Если нет — зафиксировать как IS-BLOCKED и рассмотреть форк exin/enlightn (отдельный провенанс-вет).


Итоговая таблица

# Инструмент Репозиторий / источник Лицензия Провенанс-заметка Вердикт Pin-версия
68 OWASP ZAP MCP add-on zaproxy/zap-extensions, addOns/mcp/ Apache-2.0 OWASP + Checkmarx, 15k+ звёзд, непрерывная активность, код исполняет только локальные ZAP API-вызовы ПРИНЯТ v0.1.0 (alpha, устанавливается через ZAP Marketplace)
68 dtkmn/mcp-zap-server dtkmn/mcp-zap-server Apache-2.0 Физ. лицо, 54 звезды, не аффилирован с OWASP; требует Docker (несовместим с native-Windows) ОТКЛОНЁН
69 Nuclei (self-authored wrapper) projectdiscovery/nuclei v3.8.0 + own .mcp.json wrapper MIT ProjectDiscovery org, 28k+ звёзд, активна; self-authored wrapper минимизирует attack surface ПРИНЯТ v3.8.0
69 cyproxio/mcp-for-security cyproxio/mcp-for-security MIT Официально deprecated 30.03.2026: «no longer actively maintained» ОТКЛОНЁН
69 addcontent/nuclei-mcp addcontent/nuclei-mcp MIT Анонимный владелец (нет bio/company/location), заброшен 9+ мес, placeholder в README ОТКЛОНЁН
70 Enlightn enlightn/enlightn LGPL-3.0 Провенанс чистый, НО пакет abandoned (Packagist), composer.json не поддерживает Laravel 13, мейнтейнер не отвечает 3+ мес ОТКЛОНЁН → ЗАМЕНЁН на Ward (см. пересмотр ниже, 2026-05-21)
70 Ward Eljakani/ward MIT El Jakani Yassine (named, 43 followers), 316★/19 forks, Laravel-News-featured; Go-бинарь → не зависит от версии Laravel (проблема Enlightn снята); локально (OSV.dev только для deps). Caveat: молодой (фев 2026), single-maintainer, без тегов-релизов ПРИНЯТ (замена #70) pin по commit SHA (релизов нет)

Отклонённые провенанс-случаи — сводка

Кандидат Причина отклонения
dtkmn/mcp-zap-server Docker-зависимость несовместима с native-Windows; провенанс — физ. лицо, 54 звезды
cyproxio/mcp-for-security Официально deprecated автором 30.03.2026
addcontent/nuclei-mcp Анонимный владелец + 9 мес. без активности + placeholder-README = непрозрачный провенанс (ADR-003 критерий)

Примечания к Task 2–4 (исполнитель)

  • Task 2 (ZAP): Установить ZAP v2.17.0 (zaproxy/zaproxy → latest: v2.17.0, 2025-12-15) + MCP add-on через ZAP Marketplace → Tools > Add-ons > Search: MCP. Потребуется Java 17+. Задокументировать в docs/security/zap-setup.md.
  • Task 3 (Nuclei): Скачать nuclei_3.8.0_windows_amd64.zip из https://github.com/projectdiscovery/nuclei/releases/tag/v3.8.0. Написать .mcp.json блок "nuclei" с command: "path/to/nuclei.exe". Задокументировать в docs/security/nuclei-setup.md.
  • Task 4 (Enlightn): composer require enlightn/enlightn:^2.10 --dev --ignore-platform-reqs. Проверить, что php artisan enlightn запускается и возвращает отчёт. Если работает — блокер практически снят. Если нет — зафиксировать в docs/security/enlightn-setup.md как DEFERRED и провести отдельный вет для exin/enlightn.
  • Форки Enlightn (ivqonsanada/enlightn, exin/enlightn): не прошли вет в рамках этой задачи. Если нужны — провести отдельный IS9-вет как новый sub-артефакт.

ПЕРЕСМОТР #70: Enlightn → Ward (2026-05-21, решение заказчика)

Заказчик выбрал «подобрать замену на GitHub и Anthropic» вместо установки заброшенного Enlightn или неверифицированного форка.

Рассмотрены кандидаты-замены:

Кандидат Источник Вердикт Причина
Ward Eljakani/ward (Go, MIT) ПРИНЯТ Прямая замена ниши Enlightn; Go-бинарь → нет зависимости от версии Laravel
Larafence larafence.com ОТКЛОНЁН Не выпущен (Q2 2026) + TALL/Livewire-стек (у нас Vue)
Psalm + plugin-laravel taint vimeo/psalm (MIT) НЕ для этого слота Отличный, но это код-SAST (taint) — пересекается с Semgrep #25 (IS3); не config-сканер
laravel/agent-skills laravel/agent-skills (official) НЕ scanner Официальный (Taylor Otwell, 622★) и чистый, но это общий Laravel-скил (laravel/laravel-cloud/laravel-nightwatch), не security-сканер. Опциональное доп. позже, не замена #70
sickn33/laravel-security-audit, netresearch/security-audit-skill, edulazaro/laraclaude community-скилы НЕ взяты Риск ToxicSkills + individual-провенанс; для чувствительного слота не берём

Ward — провенанс-вет (live gh api, 2026-05-21):

Параметр Значение
Репозиторий Eljakani/ward
Описание «Security scanner built for Laravel, detects misconfigurations, vulnerabilities, and exposed secrets with a beautiful TUI»
Лицензия MIT (есть LICENSE)
Звёзды / форки 316 / 19
Язык Go (бинарь)
Создан / последний коммит 2026-02-15 / 2026-03-07
Релизы нет тегов → pin по commit SHA
Владелец El Jakani Yassine (named, 43 followers, аккаунт с 2019)
Что сканирует .env (8 проверок) + config/*.php (13) + deps (OSV.dev live) + код (7 категорий: secrets/injection/XSS/debug-артефакты/crypto/config CORS-CSRF-mass-assignment/auth)
Сеть Локально; OSV.dev только для deps (как Enlightn security-checker — не телеметрия)

Почему Ward лучше Enlightn для нашего случая:

  1. Go-бинарь (как Nuclei #69) → НЕТ ограничения composer.json по версии Laravel → работает на Laravel 13 без хаков (--ignore-platform-reqs не нужен).
  2. MIT, named author, активно рекомендуется (Laravel News, 2026), 316★.
  3. Покрытие шире Enlightn: env + config + deps + код.

Caveat (зафиксирован): молодой проект (3 мес), single-maintainer, без тегов-релизов. Митигация: pin по commit SHA; MIT → можно форкнуть при забрасывании. Записать в docs/security/ward-setup.md (Task 4).

Эффект на план: слот #70 меняет инструмент Enlightn → Ward. Номер #70 и ниша (Laravel config security scanner) сохраняются. Тип меняется: было «Composer dev-dep + php artisan enlightn», стало «Go-бинарь CLI ward (как Nuclei/gitleaks/Trivy)». Граница IS3 (config-сканер vs Larastan #12 типы / Semgrep #25 generic-паттерны) сохраняется. Task 4 переписывается под Ward.


Верификация данных

Все факты получены из live-запросов GitHub API и WebFetch на 2026-05-21:

  • gh api repos/zaproxy/zaproxy — stars=15152, pushed_at=2026-05-20
  • gh api repos/zaproxy/zap-extensions/contents/addOns/mcp/CHANGELOG.md — v0.0.1 released 2026-04-02; v0.1.0 current
  • gh api repos/zaproxy/zap-extensions/contents/addOns/mcp/src/main/java/org/zaproxy/addon/mcp/tools/ — 15 tool files listed
  • gh api repos/dtkmn/mcp-zap-server — stars=54, Docker-зависимость подтверждена README
  • gh api repos/projectdiscovery/nuclei — stars=28777, pushed_at=2026-05-20, license=MIT
  • gh api repos/projectdiscovery/nuclei/releases/latest — v3.8.0, 2026-04-18
  • gh api repos/cyproxio/mcp-for-security/commits — последний коммит 2026-03-30 «deprecate: migrate to Bolt»
  • gh api repos/addcontent/nuclei-mcp — stars=47, pushed_at=2025-08-04; README содержит your-org placeholder
  • gh api users/addcontent — bio=null, company=null, location=null
  • gh api repos/enlightn/enlightn — stars=987, pushed_at=2024-06-15, license=NOASSERTION (LGPL)
  • gh api repos/enlightn/enlightn/releases/latest — v2.10.0, 2024-04-05
  • gh api repos/enlightn/enlightn/contents/composer.json — laravel/framework ^9.0|^10.0|^11.0
  • gh api repos/enlightn/enlightn/issues/200 — Laravel 12 PR открыт 2025-02-17, не смержен
  • WebFetch zaproxy.org/blog/2026-04-02-zap-mcp-server/ — alpha announcement, Simon Bennetts
  • WebFetch raw.githubusercontent.com/enlightn/enlightn/master/README.md — 66 OSS checks, abandoned status
  • WebFetch raw.githubusercontent.com/enlightn/enlightn/master/LICENSE.md — LGPL-3.0, Copyright Enlightn Software / Paras Malhotra
  • WebFetch raw.githubusercontent.com/projectdiscovery/nuclei/main/README.md — MIT, optional cloud dashboard, no default telemetry