Перед установкой любого внешнего инструмента в раздел 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
Весь трафик идёт **только к локальному 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` |
**Телеметрия:** Пакет использует `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` (отдельный провенанс-вет).
| 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 (релизов нет) |
- **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-провенанс; для чувствительного слота не берём |
| Сеть | Локально; 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★.
**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.