# 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). ```powershell $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 (важно) 1. **`Start-Process -ArgumentList` калечит путь к jar** с пробелами/кириллицей (`Error: Unable to access jarfile`). Запускать через оператор `&` (корректно кавычит) **или** задавать `-WorkingDirectory bin\ZAP_2.17.0` + относительное имя `zap-2.17.0.jar`. 2. **Первый daemon-старт тянет полный штатный набор аддонов** (~817 МБ: active/passive scan rules, spider, ajax, openapi, soap, graphql, selenium/webdrivers) — это нормально. 3. **Цель сканирования — `127.0.0.1`** (как у Nuclei), не `localhost`. ## Запуск daemon (для MCP-режима) ```powershell $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 (широта: известные дыры) — комплементарны.