bin/nuclei.exe v3.8.0 + 13060 templates. Smoke vs live portal verified (1057 reqs sent to 127.0.0.1:8000, scan completed, 0 matched on tech tag). Quirks documented: target 127.0.0.1 not localhost (resolver); low rate-limit for single-threaded artisan serve. Wired as CLI (like gitleaks/squawk/Trivy), not MCP — nuclei doesn't speak MCP; no .mcp.json/l1-watcher needed for #69. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.5 KiB
Nuclei (#69) — установка и использование
Узел A8: #69 — широкое сканирование на известные уязвимости / небезопасную экспозицию.
Источник (IS9-вет принят): projectdiscovery/nuclei v3.8.0, MIT (см. infosec-vet.md).
Тип: CLI-сканер (Go-бинарь) — не MCP-сервер (см. «Решение по интеграции» ниже).
Установка (native-Windows)
Готовый бинарь (Go не требуется):
# v3.8.0 windows amd64, pin из IS9-вета
Invoke-WebRequest -Uri "https://github.com/projectdiscovery/nuclei/releases/download/v3.8.0/nuclei_3.8.0_windows_amd64.zip" -OutFile "$env:TEMP\nuclei.zip"
Expand-Archive "$env:TEMP\nuclei.zip" -DestinationPath "$env:TEMP\nuclei" -Force
Copy-Item "$env:TEMP\nuclei\nuclei.exe" "bin\nuclei.exe"
bin\nuclei.exe -update-templates -silent
- Расположение:
bin/nuclei.exe(рядом с gitleaks/lychee/squawk;bin/*.exeв.gitignore→ бинарь машинно-локальный, в репозиторий не коммитится). - Шаблоны:
~/AppData/Roaming/nuclei+~/nuclei-templates(13 060 yaml, v10.4.3 на 2026-05-21). - Verified:
nuclei -version→ v3.8.0 ✓.
Квирки native-Windows (важно)
- Цель —
127.0.0.1, НЕlocalhost. Резолвер nuclei на этой машине падает наlocalhost([INF] Skipped localhost:8000 ... no address found for host), хотяcurl http://localhost:8000→ 200. Всегда указывать явный IPv4:-u http://127.0.0.1:<port>. - Низкий rate-limit/concurrency для dev-сервера.
php artisan serveоднопоточный — под нагрузкой полного скана даёт массу connection-ошибок (в smoke: 1698 errors на 1057 запросов). Для локальной цели:-rate-limit 20 -c 5(или ниже). Это не уязвимости, а таймауты/résets перегруженного dev-сервера. -duc(disable update check) — в офлайн/CI-прогонах, чтобы не дёргать сеть на проверку версии.
Smoke (verified 2026-05-21)
bin\nuclei.exe -u "http://127.0.0.1:8000" -tags tech -stats -timeout 5 -no-color -duc
Результат: 931 шаблон загружен, 1057/1059 запросов отправлено к цели, скан завершён (Scan completed), Matched: 0 (чисто на теге tech — ожидаемо для dev-портала). Доказывает: nuclei устанавливается, видит и сканирует живой портал. (Первый прогон по localhost цель пропустил — см. квирк 1; по 127.0.0.1 отработал.)
Решение по интеграции: CLI, не MCP
В IS9-вете слот #69 предполагал «self-authored MCP-wrapper». При реализации уточнено: nuclei не говорит на протоколе MCP — обернуть его в MCP-сервер = писать собственный MCP-серверный код (доп. attack surface + поддержка). Вместо этого nuclei интегрируется как CLI-инструмент — ровно как уже существующие security-CLI проекта (gitleaks #8, squawk #15, Trivy #26): бинарь в bin/, вызывается по требованию из Bash скилом go-live (#73). Преимущества: ноль чужого/своего обёрточного кода между Claude и бинарём; единообразие с тулчейном; минимальный attack surface. Следствие: для #69 не нужны .mcp.json-блок и l1-watcher alias (они только для настоящих MCP-серверов; #68 ZAP — единственный MCP в наборе).
Использование
# Цель ВСЕГДА 127.0.0.1 (квирк 1); бережный режим для dev (квирк 2)
bin\nuclei.exe -u "http://127.0.0.1:8000" -rate-limit 20 -c 5 -timeout 5 -duc -severity medium,high,critical
Гард IS8: по умолчанию — локальная/тестовая копия (127.0.0.1). Боевой сервер — только по явной команде заказчика.