Findings & secrets
The Vulnerabilities page is where you triage what Pilot’s scanners found. It has two tabs:
- Scanner — Nuclei vulnerability findings (CVEs, exposed admin panels, misconfigurations).
- Secrets — leaked credentials recovered from crawled pages, JavaScript bundles, and connected repos.
Both are verified data — Pilot saw it. The hypothetical “what could go wrong” scenarios live elsewhere (Attack Graph → What-if and SaaS Matrix chains).
Nuclei findings
Nuclei is the template-based vulnerability scanner Pilot runs against your targets. Each match is a finding: a template that fired against a specific host, with severity, evidence, and a CVE id when applicable.
The list is filterable by severity, by template, by host, by CVE, and by company scope. Each row shows the matched-at value — the URL or parameter where the template fired — so you can re-test manually.
Severities follow Nuclei’s standard ladder: critical → high → medium → low → info. The home dashboard’s “What’s urgent” panel shows only critical + high.
Running a scan
From the Vulnerabilities page, Active → Launch:
- Pick the targets to scan (or use the search filter to multi-select).
- Choose Scan power (Small / Medium / Large) — controls how much compute the scan gets. Small is fine for first runs and small target sets.
- Click Start Scan. The job queues, then runs in the background. Toast notifications fire when it completes.
You can dispatch many scans in parallel; Pilot serialises them when capacity is constrained and auto-dispatches the next as a slot frees.
Secrets
The Secrets tab lists pattern matches — strings that look like credentials. Pilot’s pattern catalogue covers AWS / GCP / Azure keys, GitHub tokens, Slack tokens, Stripe live keys, Twilio SIDs, database DSNs, JWTs, and many SaaS-specific formats.
Every match carries:
- Pattern id (e.g.
aws_access_key,slack_bot_token,stripe_live_sk). - Source — URL of the crawled page, JS bundle, or repo file the match came from.
- Triage verdict — what Pilot’s automated triage decided.
Triage verdicts
Most “secret matches” in real-world crawl data are false positives — third-party JS minification artefacts, build hashes, CSS class mangles, test fixtures. Pilot’s secondary triage pass tags each match with one of:
unverified— not yet triaged.probable_fp— confidently a false positive (obfuscated JS, build artefact, etc.). Hidden from the default Secrets list view; surface via the filter.public_by_design— a real value that’s intentionally public (e.g. Stripe publishable keys, public Algolia search keys, OAuth client ids without secrets). Useful to track but not an exposure.real_secret— high-confidence true positive. These are the ones to act on.
The headline number Pilot reports — and the agent quotes when asked about leaked-secret exposure — is the real-secret count, not the raw pattern-match count. So “50 matches, all triaged as false positives” is the honest summary; reporting “50 leaked secrets” would be alarmist and wrong.
Where to dig in
- A critical CVE with a CVSS ≥ 9.0 on a public host → triage now.
- A high-severity finding with a CVE id → check whether the template asserts the CVE conditions or just fingerprints the version (Nuclei templates vary). Confirm before escalating.
- A
real_secretmatch in a public source → rotate the credential first, then investigate scope of exposure. - A
probable_fpmatch with surprising context → flip the verdict manually if Pilot’s triage was wrong. The change is per-customer and persists.
Connecting your repos
Repo scanning runs from the Code Security page — see
Integrations → Code Security for setup.
Findings from connected repos appear in the Secrets tab with a
repo source badge.