From qa-dast
Configures and runs NightVision - "white-box-assisted Dynamic Application Security Testing (DAST) tool" that "analyzes code before simulating attacks and traces findings back to their origin"; supports OpenAPI / Postman / GraphQL / web app + REST API targets; auth via Interactive Logins / Header & Cookie / TOTP; per-finding suppression via Alert Rules; CLI integration via `nightvision` command. Use when the team needs DAST that traces findings back to source code (white-box-assisted) on top of OWASP ZAP's pure black-box approach.
How this skill is triggered — by the user, by Claude, or both
Slash command
/qa-dast:nightvision-dastThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Per [docs.nightvision.net][nv-docs]:
Per docs.nightvision.net:
"NightVision is a white-box-assisted Dynamic Application Security Testing (DAST) tool" that "helps you identify security vulnerabilities in web applications and REST APIs."
The white-box-assistance differentiator: NightVision "analyzes code before simulating attacks and traces findings back to their origin" per nv-docs. This source-traceability is the value-add over pure-black-box DAST tools (ZAP / Burp).
zap-baseline for
combined coverage.Per nv-docs the CLI is documented in "Installing the CLI"; consult the live docs for current install commands per platform. Typical pattern:
# Linux/macOS install (verify against docs.nightvision.net)
curl -fsSL https://install.nightvision.net | sh
# Verify
nightvision --version
# Authenticate
nightvision login
Per nv-docs the platform supports:
| Target type | How |
|---|---|
| OpenAPI / Swagger spec | Upload via CLI / dashboard |
| Postman collection | Upload via CLI / dashboard |
| GraphQL endpoint | Configure via API Discovery framework |
| Public web app URL | Standard URL target |
| Authenticated web app | + auth recorder configuration (Step 4) |
| Public REST API | Standard URL target |
| Authenticated REST API | + Header / Cookie / TOTP auth |
Spec-driven targets give the scanner full request-shape knowledge (query params, body schemas, content types); crawl-based targets only see what the spider discovers.
# Scan an OpenAPI-described API
nightvision scan create \
--name "my-api-staging" \
--target-url https://api.example.com \
--spec ./openapi.yaml \
--auth header \
--auth-header "Authorization: Bearer $TOKEN"
# Wait for completion + retrieve findings
nightvision scan get <scan-id> --wait
nightvision scan results <scan-id> --output json > findings.json
(Exact CLI verb names per nv-docs current release.)
Per nv-docs the platform supports:
| Auth type | Use |
|---|---|
| Interactive Logins | Record a browser-side login flow; replay during scan |
| Header authentication | Static token in HTTP header |
| Cookie authentication | Static cookie value |
| TOTP authentication | Time-based OTP for 2FA-protected apps |
For interactive logins, the auth recorder captures the login flow in the dashboard UI; the recording is saved + referenced by name in subsequent scans.
Per nv-docs "Scope Control" defines:
/admin/* for
admin-protected zones, /static/* for non-app assets)/users/*)Tightening scope is essential - un-scoped scans hit unintended endpoints + waste scan budget.
Per nv-docs "Alert Rules" govern per-finding suppression:
| Mechanism | Use |
|---|---|
| Alert Rule (dashboard / API) | Suppress per (finding-type, URL-pattern) tuple |
| Scope exclusion | Skip whole URL trees |
| Severity threshold | Filter low-severity findings |
| Mark-as-FP per scan | Persistent across re-runs |
Justification template (mandatory in Alert Rules):
Alert Rule: Suppress "SQL Injection" on /search?q=
Reason: parameter pre-validated via Joi schema; verified safe in code review
Reviewer: [email protected] (2026-05-15)
Expires: 2026-12-15
Re-review-date: 2026-12-15
Cadence: every quarter, audit Alert Rules in the dashboard; expired rules removed; persistent ones reviewed.
nightvision scan results <id> --output FORMAT:
json - for dast-finding-triagersarif - for GitHub Code Scanningcsv - for spreadsheet reviewpdf - for compliance reportsjobs:
nightvision:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- run: |
curl -fsSL https://install.nightvision.net | sh
nightvision login --token ${{ secrets.NV_TOKEN }}
SCAN_ID=$(nightvision scan create \
--name "ci-${{ github.run_id }}" \
--target-url https://staging.example.com \
--spec ./openapi.yaml \
--auth header \
--auth-header "Authorization: Bearer ${{ secrets.STAGING_TOKEN }}" \
--output json | jq -r '.id')
nightvision scan get $SCAN_ID --wait
nightvision scan results $SCAN_ID --output sarif > nightvision.sarif
- uses: github/codeql-action/upload-sarif@v3
if: always()
with: { sarif_file: nightvision.sarif }
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Crawl-based scan when OpenAPI spec exists | Misses unspidered endpoints | Always use --spec if available (Step 3) |
| Scan production | Active probes risk data corruption | Staging only |
| Skip scope exclusion | Tests waste budget on out-of-scope URLs | Configure scope (Step 5) |
Suppress without Re-review-date | Permanent FP debt | Required template (Step 6) |
| Hardcode auth tokens in CI logs | Token leak | Use CI secret + redact (::add-mask:: in GHA) |
zap-baseline + burp-headless
combination instead.zap-baseline,
burp-headless - sister DAST toolsdast-baseline-runner -
build-an-X for layered DASTdast-finding-triager -
unifier agentnpx claudepluginhub testland/qa --plugin qa-dastProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.