DAST (preview) for VibeControls
OWASP ZAP baseline DAST scan against alpha preview URLs at deploy.preview.
vibe plugin install @vibecontrols/vibe-plugin-security-dast-preview
About this plugin
@vibecontrols/vibe-plugin-security-dast-preview
OWASP ZAP baseline DAST provider for the deploy.preview lifecycle stage in VibeControls. Provider name: zap-baseline. Wraps the ghcr.io/zaproxy/zaproxy:stable Docker image and runs zap-baseline.py against the preview URL.
Registers itself with @vibecontrols/vibe-plugin-security under the per-stage provider type security.release (per PROVIDER_TYPE_FOR_STAGE("deploy.preview")). When the user picks "zap-baseline" as their default provider for deploy.preview, the security meta plugin dispatches scan runs here.
Install
vibe plugin install @vibecontrols/vibe-plugin-security-dast-preview
vibe security providers set-default --stage deploy.preview --provider zap-baseline
This plugin does NOT download a binary — it shells out to Docker. On ensureToolInstalled() the plugin probes docker info and best-effort docker pull ghcr.io/zaproxy/zaproxy:stable so the first real scan starts fast. If Docker is missing or unreachable, every scan returns a "succeeded" result with a single info finding describing the skip reason — the lifecycle never blocks on local-tooling absence.
Behavior
- Probes
docker info(5s timeout). On failure, emits info findingtool.docker.unavailablewith reasondocker-missingand skips. - HEAD-probes
previewUrl(10s timeout). On missing/failed probe, emits info findingtarget.url.unreachablewith reasontarget-url-missingortarget-url-unreachable. - Runs:
Wall-clock budget controlled bydocker run --rm -v <workdir>:/zap/wrk/:rw <zapImage> zap-baseline.py \ -t <previewUrl> -J report.json -r report.html -m 5scanTimeoutSeconds(default 600s). - Parses
report.jsonintoNormalizedFinding[]:- Severity from ZAP
riskdesc:Critical → critical,High → high,Medium → medium,Low → low,Informational → info. - Category:
sast(closest fit; ZAP findings are HTTP/auth misconfigs). ruleId = zap.<pluginid>(or kebab-cased name if no pluginid).cwe = ["CWE-<cweid>"]when present.file = <first instance uri>,remediation = <alert.solution>.
- Severity from ZAP
- Emits
report.json+report.htmlas evidence artifacts.
Configuration
Per-vibe config (stored in RepositorySecurityConfig.pluginAssignments["deploy.preview"].config):
provider: zap-baseline
config:
previewUrl: https://pr-123.preview.example.com # required
zapImage: ghcr.io/zaproxy/zaproxy:stable # optional override
scanTimeoutSeconds: 600 # wall budget; default 600
extraArgs: [] # additional flags appended to zap-baseline.py
Use it in 30 seconds
- Make sure the agent is running:
vibe start - Install the meta first:
vibe plugin install @vibecontrols/vibe-plugin-security - Install this plugin:
vibe plugin install @vibecontrols/vibe-plugin-security-dast-preview - List installed plugins:
vibe plugin list
Other Security plugins
Archive Offboard
Writes tombstone.json evidence at archive.offboard for SOC2/ISO retention proofs.
@vibecontrols/vibe-plugin-security-archiveDeploy alpha smoke
TLS / HSTS / CSP smoke checks for alpha environment URLs at deploy.alpha.
@vibecontrols/vibe-plugin-security-deploy-alphaDeveloper local
Local pre-commit secrets scanner (gitleaks protect) — runs on the developer machine.
@vibecontrols/vibe-plugin-security-developer-localIncident response
Targeted incident-response scanner for incident.response lifecycle stage.
@vibecontrols/vibe-plugin-security-incidentRepo onboard
Repo profile detector — picks the right policy bundle on repo.onboard.
@vibecontrols/vibe-plugin-security-onboardPackage publish
Cosign signing + SLSA provenance at package.publish.
@vibecontrols/vibe-plugin-security-package-publish