Skip to main content

vulkro scan

Scans a project for security findings: endpoints and auth, attack paths, secrets, dependency CVEs, IaC and more.

vulkro scan . # same as `vulkro scan ci .`
vulkro scan . --format sarif > vulkro.sarif # for code scanning
vulkro scan . --fail-on critical,high # CI gate

Presets​

vulkro scan quick . # or: vulkro scan --preset quick .
PresetUseSets
quickPre-commit--min-confidence high, --scope src, --since HEAD~1
ci (default)CI--gate and a fail-on Critical + High exit policy
deepBefore a release--all-confidence, --include-unreachable, --min-evidence 0.0

A flag you pass always wins over the preset. Bare vulkro scan . prints a one-time hint naming the preset; VULKRO_QUIET_PRESET_HINT=1 silences it.

Main flags​

FlagDescription
-f, --format <FORMAT>Output format (see below). Default table.
--fail-on <SEVERITIES>Severities that cause exit 1, for example critical,high.
--gateUse the [quality_gate] thresholds in vulkro.toml (overrides --fail-on).
--gate-vs <REF>Exit code counts only findings on lines changed since REF.
--diff-only <REF>Scan only files changed since REF.
--baseline <FILE>Report only findings not in a saved baseline.
--ratchetFail only on findings new since .vulkro-baseline.json. --ratchet-strict requires the file.
--min-confidence <LEVEL>high, medium (default) or low.
--all-confidenceShow every finding (same as --min-confidence low).
--scope <SCOPE>all (default) or src (drop Dockerfile, lockfile, IaC and docs findings; keeps .env* and k8s manifests).
--saveSave the run to ~/.vulkro/scans.db for history, trends and the console.
--webScan, save, then open the local console.
--profile <PROFILE>Add a compliance evaluation: owasp-asvs, pci, soc2.
--pq-auditFlag RSA, ECDSA, ECDH and classical Diffie-Hellman for post-quantum migration.
--validate-secretsCheck found secrets against the provider (network call; off by default).
--post-to <DEST>Send a summary to slack, teams, jira or pagerduty after the scan.

Run vulkro scan --help for the rest (--min-severity, --rule-pack, --since, --triage, --strict-confidence, --include-unreachable, --top, --jobs, --no-cache and more).

Output formats​

UseFormats
Terminal and toolingtable, json, ndjson, csv, junit
Code scanning and pull requestssarif, gh-pr, gh-pr-inline, github-annotations, gitlab-mr, bitbucket-pr, azure-pr
SBOM and VEXcyclonedx, cyclonedx-1.7, spdx, spdx3, openvex, cyclonedx-vex, cbom, cbom-1.7, aibom
Reports and evidencepdf (needs wkhtmltopdf), ropa-md, ropa-html, evidence-graph

See Output formats.

Gating in CI​

vulkro scan ci . --fail-on critical,high # fail on any Critical or High
vulkro scan . --gate-vs origin/main # fail only on new lines in this PR
vulkro scan . --ratchet # fail only on findings new since the baseline

Findings Vulkro flags but cannot decide offline (disposition not-examined, such as object-level authorization) never fail the run. They stay in the report.

Inline suppression​

# vulkro:disable-next-line API2
@router.get("/health")
def health(): ...

// vulkro:disable-file at the top of a file silences the whole file. The rule id can be a detector id or an OWASP code such as API1. See Suppressions.

Exit codes​

CodeMeaning
0No findings at or above --fail-on (or the gate passed).
1Findings reported, a gate or ratchet block, or no licence (vulkro: license_required).
2Bad arguments, IO failure or internal error.

A tree where no source file could be examined is never 0: it is 2, or 1 if dependency, container, IaC or secret checks still reported findings.

See also: vulkro gate, Confidence model, Baselines.