WASViking Docs
⌘K
Capabilities

Secrets Detection

Find leaked credentials on disk, in git history, and in public web responses. AI classifier triages matches before promotion. Verified-live secrets flagged for immediate rotation.

WASViking® covers leaked credentials in two parallel places: where they hide on disk inside the customer environment, and where they accidentally surface on the public web.

Coverage maps to OWASP A07:2021 (Identification and Authentication Failures) and CWE-798 (Use of Hard-coded Credentials).

How a detection becomes a Finding

Sentinel scans source tree
        │
        ▼
Detector match (32 patterns)
        │
        ▼
AI classifier (real_secret / placeholder / test_fixture)
        │
        ├─▶ suppressed (test, doc, placeholder), kept in submission
        │   for audit, not promoted to Findings
        │
        ▼
Promoted to Findings workflow (category: token_exposure, CWE-798)
        │
        ▼
Live verification (optional, 10 detectors)
        │
        ▼
Findings flagged "VERIFIED LIVE" for triage priority

Premise-side: wasviking-sentinel secrets

32 detectors, 10 of them with live verification. Raw secrets never leave the host. Only a SHA-256 hash and a masked preview reach WASViking.

See wasviking-sentinel secrets for the full agent reference.

Detector tiers

Detectors are grouped by tier, which drives default severity and helps operators prioritize:

Tier Detectors include Default severity
Cloud AWS access keys, AWS secret keys, AWS session tokens, Azure client secrets, GCP service account JSON, Azure connection strings. High
Payments Stripe (live and test), SendGrid, Twilio. High
VCS GitHub PAT (classic and fine-grained), GitHub app installation tokens, GitLab PAT, GitLab runner tokens. High
Comms Slack bot tokens, Slack user tokens, Slack webhooks, PagerDuty integration keys. Medium-High
Database Postgres / MySQL / MongoDB / Redis connection URIs with credentials embedded. High
Keys RSA, EC, OpenSSH private keys. High
Generic High-entropy strings that look like credentials but do not match a specific provider pattern. Medium

Cloud-side detection

The parallel leak class is secrets exposed in HTML, JSON, and JavaScript responses on the public web. WASViking applies the same pattern catalog to scan responses during a DAST run. Matches feed the same token_exposure Findings pipeline.

The AI classifier

Pattern matching alone produces noise. WASViking routes every match through an AI classifier before promotion. The classifier reads the match in its file or response context and returns one of:

Verdict What happens
real_secret Promoted to a Finding. Confidence is recorded.
placeholder Suppressed. Counted under "test / docs / placeholder".
test_fixture Suppressed.
uncertain Promoted, but flagged for operator review.

The classifier verdict is rendered alongside the match in the portal:

AI classification: real_secret (confidence 80%). Detector aws_access_key matched a provider-shaped credential.

Suppressions are kept in the submission record so an operator can audit what the classifier filtered, but they do not appear as Findings.

Privacy guarantee

  • Agent. Raw secret held in memory only long enough to verify (if requested), then discarded. Submission payload carries hash, masked preview, and the verifier result. Nothing else.
  • Cloud. The matched substring is the only secret material the platform sees. A masked preview is rendered in the portal; the raw match is only visible to operators with the right scope, on explicit reveal.

False-positive controls

In order of how they fire:

  1. Path-based suppression for *.test.*, __tests__/, /docs/ and similar canonical test paths.
  2. Pattern-based suppression for canonical placeholders (EXAMPLE, PLACEHOLDER, XXXX).
  3. AI classifier as the final layer. Sees the match in context and decides real_secret / placeholder / test_fixture / uncertain.
  4. Per-detector quality score. Low-quality detectors are gated by config and contribute lower default severity.

The classifier's confidence is exposed in the portal so the operator can spot-check borderline cases.

In the portal: Hard-coded Secrets

The inventory lives at Inventory → Secrets in the portal sidebar.

List view

Header stats summarize the org-wide state:

Stat Meaning
Submissions How many secret-scan submissions are in the inventory.
With verified-live matches Submissions that contain at least one live-verified credential.
Open secret findings Currently open Findings of category token_exposure.

Filters:

Filter What it does
Target Substring search by target name.
Verified live only Toggle. Limits the list to submissions with at least one verified-live match.

Table columns:

Column What it shows
Submitted Timestamp of the submission.
Target The asset the scan ran against, as the agent reported it.
Source The submission source (sentinel_run, cloud_dast, manual_intake).
Files Number of files scanned in this submission.
Matches Raw detections, including suppressed.
Verified live Number of credentials verified live with the provider.
Findings Number of Findings promoted from this submission.
Severity Severity distribution badges (HIGH · 4, MEDIUM · 2).

Submission detail

Click any row to open the submission detail. It carries the agent identity, the host that produced it, the runtime version, and a breakdown.

Top cards:

Card Meaning
Files scanned Total files walked, plus the cumulative byte size.
Matches Raw detector hits (before AI suppression).
Verified live Hits confirmed live with the provider.
Findings promoted Hits that became Findings under the workflow.
Suppressed Hits the AI classifier ruled placeholder or test_fixture.

Detector breakdown table shows, per detector:

Column Meaning
Detector Detector identifier (aws_access_key, sendgrid_api_key, generic_high_entropy, etc.).
Provider Vendor (AWS, SendGrid, Azure, Generic).
Tier The category tag (CLOUD, PAYMENTS, GENERIC).
Matches Match count for this detector in this submission.
Verified live Live-verified subset.
Severity Severity distribution.

Top Findings lists the highest-risk matches with full context:

  • Severity, verification state (VERIFIED LIVE / UNVERIFIED), tier badges.
  • File path with line number.
  • Masked preview (AKIA••••••••••••OTAU) and the entropy score.
  • A code excerpt with the masked secret highlighted.
  • AI classifier verdict and confidence.
  • CWE mapping, status, seen count, deep link to the canonical Finding.

Manual Leak Intake

For security teams that already subscribe to breach feeds, the Manual Leak Intake page lets operators ingest known-leaked credentials and have the platform match them across the inventory.

Scope: sca:ioc (shared with manual SBOM IOC). Same lifecycle as agent-submitted matches: AI classifier → optional verification → Findings workflow.

Where it lives in the portal

  • Inventory → Secrets: submissions inventory + submission detail.
  • Inventory → Manual Leak Intake: operator-supplied indicators.
  • Findings: filter by category token_exposure or credential_exposure.
  • Settings → API Keys: secrets:submit scope for agents.

What it does NOT do

  • No raw secret leaves the customer environment. Hash + masked preview only.
  • No automatic rotation. Verified-live matches are flagged so the team can rotate them; WASViking does not call provider rotation APIs.
  • No public web crawling beyond the configured DAST surface. Cloud-side detection runs against the scan responses your scan configuration already produces.