- ZAP cross-platform 2.17.0 + MCP-аддон mcp-alpha-0.0.1 на portable Temurin JRE 17 (bin/, gitignored) - Ward v0.4.1 собран portable Go 1.26.3 (bin/ward.exe); smoke app/ → 2 находки (APP_DEBUG/APP_ENV) - setup-доки docs/security/zap-setup.md + ward-setup.md - нормативный синк: Tooling v2.21 / CLAUDE.md v2.25 / PSR_v1 v3.21 / Pravila v1.38 - ADR-014 amended (Status/Decision/Consequences) + routing-off-phase v1.5 - gates GREEN: cross-ref + l1-watcher 0 drift / markdownlint / lychee / gitleaks Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
5.0 KiB
OWASP ZAP (#68) — установка и использование
Узел A8: #68 — глубокая боевая DAST работающего портала (spider + active scan: обход входа, инъекции, XSS, сессии/CSRF).
Источник (IS9-вет принят): официальный ZAP «MCP Integration» add-on (zaproxy/zap-extensions, addOns/mcp/, Apache-2.0; провенанс OWASP/Checkmarx).
Тип: Java-приложение (ZAP) + MCP-аддон (единственный настоящий MCP в наборе A8). Управляется через MCP при запущенном ZAP-демоне.
Установка (native-Windows, портативно, без choco)
ZAP — Java-приложение, требует Java 17+. И Java, и ZAP ставятся портативно (zip, без choco), всё под bin/ (gitignored).
$ProgressPreference='SilentlyContinue'
# 1. Portable Temurin JRE 17 (официальный zip, проверка SHA256)
Invoke-WebRequest -Uri 'https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.19%2B10/OpenJDK17U-jre_x64_windows_hotspot_17.0.19_10.zip' -OutFile 'bin\_dl\jre17.zip' -UseBasicParsing
# ожидаемый SHA256: 79a598e1fbb4e16582d92c4ee22280a3c4d72fd52606e1e46b1223c0fe53b0da
tar.exe -xf 'bin\_dl\jre17.zip' -C 'bin\_runtimes' # → bin\_runtimes\jdk-17.0.19+10-jre\
# 2. ZAP cross-platform 2.17.0 (официальный GitHub-релиз; размер 286 652 857 Б)
Invoke-WebRequest -Uri 'https://github.com/zaproxy/zaproxy/releases/download/v2.17.0/ZAP_2.17.0_Crossplatform.zip' -OutFile 'bin\_dl\zap.zip' -UseBasicParsing
tar.exe -xf 'bin\_dl\zap.zip' -C 'bin' # → bin\ZAP_2.17.0\
# 3. MCP-аддон (+ зависимости) из маркетплейса ZAP
$env:JAVA_HOME="$((Get-Location).Path)\bin\_runtimes\jdk-17.0.19+10-jre"
& "$env:JAVA_HOME\bin\java.exe" -jar 'bin\ZAP_2.17.0\zap-2.17.0.jar' -cmd -dir 'bin\ZAP_2.17.0\_home' -addoninstall mcp
- Расположение:
bin/ZAP_2.17.0/(движок + аддоны в_home/plugin/), JRE —bin/_runtimes/jdk-17.0.19+10-jre/.bin/*в.gitignore→ машинно-локально, не коммитится. - Java — портативная, системная не устанавливается (
JAVA_HOMEзадаётся при запуске ZAP). - Verified (2026-05-21):
java -jar zap-2.17.0.jar -cmd -version→2.17.0; daemon API/JSON/core/view/version/→2.17.0; аддонmcp-alpha-0.0.1.zapв_home/plugin/.
Квирки native-Windows (важно)
Start-Process -ArgumentListкалечит путь к jar с пробелами/кириллицей (Error: Unable to access jarfile). Запускать через оператор&(корректно кавычит) или задавать-WorkingDirectory bin\ZAP_2.17.0+ относительное имяzap-2.17.0.jar.- Первый daemon-старт тянет полный штатный набор аддонов (~817 МБ: active/passive scan rules, spider, ajax, openapi, soap, graphql, selenium/webdrivers) — это нормально.
- Цель сканирования —
127.0.0.1(как у Nuclei), неlocalhost.
Запуск daemon (для MCP-режима)
$root=(Get-Location).Path; $env:JAVA_HOME="$root\bin\_runtimes\jdk-17.0.19+10-jre"
Start-Process -FilePath "$env:JAVA_HOME\bin\java.exe" -WorkingDirectory "$root\bin\ZAP_2.17.0" `
-ArgumentList @('-jar','zap-2.17.0.jar','-daemon','-dir','_home','-host','127.0.0.1','-port','8092','-config','api.disablekey=true')
# проверка готовности: GET http://127.0.0.1:8092/JSON/core/view/version/ → {"version":"2.17.0"}
MCP-интеграция: при запущенном демоне MCP-аддон отдаёт MCP-эндпоинт; зарегистрировать его SSE-адрес в .mcp.json (блок zap), затем доступны 15 MCP-инструментов (ZapStartSpiderTool, ZapStartActiveScanTool, ZapGetActiveScanStatusTool, ZapGenerateReportTool и т.д.) — все обращаются только к локальному ZAP API. Аддон alpha (mcp-alpha-0.0.1) — API может меняться.
Гард IS8
Цель по умолчанию — локальная/тестовая копия (127.0.0.1). Боевой портал — только по явной команде заказчика. Active scan тяжёлый — в smoke не запускать (только spider + passive / проверка связности). READ-only постура.
Границы (ADR-014)
IS1 — ZAP (динамика, бьёт работающий портал) ≠ Semgrep #25 (статика, читает код). IS2 — ZAP (глубина: логика приложения) ≠ Nuclei #69 (широта: известные дыры) — комплементарны.