# Провенанс-вет внешних инструментов 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=`). - Конфигурация `.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](https://github.com/enlightn/enlightn/pull/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