Skip to content

[REVIEW] scanner-tuning: add ephemeral asset identity and stale-scan evidence gates #2007

@tiandashu

Description

@tiandashu

Skill Being Reviewed

Skill name: scanner-tuning
Skill path: skills/vuln-management/scanner-tuning/

False Positive Analysis

Benign code/configuration that triggers a false positive:

scan_result:
  scanner: Tenable
  finding_id: CVE-2024-3094
  asset:
    ip: 10.40.12.18
    hostname: ip-10-40-12-18.ec2.internal
    cloud_provider: aws
    instance_id: i-0abc1111old
    ami_id: ami-legacy-2024-03
  first_seen: 2026-06-01T01:00:00Z
  last_seen: 2026-06-01T01:00:00Z
  scan_completed_at: 2026-06-01T01:10:00Z

current_asset_inventory:
  ip: 10.40.12.18
  instance_id: i-0def2222new
  ami_id: ami-hardened-2026-06
  launched_at: 2026-06-08T09:20:00Z
  package_status:
    xz-libs: 5.4.6-3.el9.patched

Why this is a false positive:
The scanner result is tied to a recycled private IP/hostname, not to the current cloud asset identity. scanner-tuning currently tells reviewers to document affected assets and correlate scanner output, but it does not require evidence that the finding is bound to a stable asset identity such as cloud instance ID, image digest, Kubernetes UID, container image digest, or asset inventory snapshot timestamp. In elastic cloud environments, suppressing or escalating a finding based only on IP/hostname can misclassify a terminated instance's stale vulnerability as present on a new clean instance.

Coverage Gaps

Missed variant 1: stale ephemeral compute finding

finding:
  cve: CVE-2025-12345
  asset_key_used_by_scanner: 172.20.5.44
  scan_time: 2026-06-03T02:00:00Z
cloud_inventory_now:
  172.20.5.44:
    instance_id: i-new-prod-api
    launch_time: 2026-06-07T18:00:00Z
    owner: payments-api

Why it should be caught:
The skill should require asset identity freshness before calling a finding true, false, suppressed, or severity-adjusted. The current workflow can treat scan history as current evidence even when the target has been replaced.

Missed variant 2: container image tag drift

scanner_finding:
  image: registry.example.com/app/api:latest
  digest_at_scan: sha256:oldvulnerabledigest
runtime_inventory:
  image: registry.example.com/app/api:latest
  digest_running: sha256:newpatchdigest
  deployed_at: 2026-06-08T10:00:00Z

Why it should be caught:
For containers, tags are mutable. Tuning decisions must bind findings and suppressions to immutable image digests, not tags. Otherwise a valid suppression for one digest can hide a new vulnerable digest, or a stale finding can remain against a patched digest.

Edge Cases

  • Autoscaling groups can replace every host between weekly scans; the asset ID and launch timestamp matter more than IP.
  • NAT, DHCP, and Kubernetes node reuse can cause the same scanner asset key to represent different workloads over time.
  • External scanners may only see a load balancer IP; reviewer should mark backend identity as Not Evaluable unless deployment or target mapping evidence exists.
  • Long-lived suppression records should expire or revalidate when instance ID, image digest, AMI ID, cluster UID, or scanner asset UUID changes.

Remediation Quality

  • Fix resolves the vulnerability
  • Fix doesn't introduce new security issues
  • Fix doesn't break functionality
  • Issues found: Add an evidence gate before false-positive disposition and severity override: require stable asset identity, inventory timestamp, scanner asset UUID, cloud instance/resource ID, image digest, and proof that the scanned object is the object currently in scope. Suppressions should be scoped to immutable asset identity where possible and must expire on asset replacement.

Comparison to Other Tools

Tool Catches this? Notes
Semgrep No Static code scanner; not designed for cloud asset identity freshness.
CodeQL No Code-focused; does not correlate scanner asset keys with cloud inventory.
Qualys/Tenable/Rapid7 Partial They maintain asset IDs, but exports are often consumed downstream by IP/hostname unless integrations preserve scanner UUID and cloud metadata.
Wiz/Prisma/Lacework Partial CNAPPs usually bind cloud resource IDs and image digests; the review skill should require this evidence when vulnerability scanners feed VM tools.

Overall Assessment

Strengths:
scanner-tuning already has strong false-positive taxonomy, authenticated scan guidance, severity override rules, and cross-scanner correlation.

Needs improvement:
It assumes an affected asset is stable once named. Modern cloud and container environments need an asset-identity freshness gate before tuning decisions are accepted.

Priority recommendations:

  1. Add an Asset Identity Freshness step before false-positive disposition and severity override.
  2. Extend the false-positive record with scanner asset UUID, cloud resource ID, launch/deploy timestamp, image digest, and inventory source timestamp.
  3. Require suppression invalidation when IP/hostname maps to a new instance, image digest, AMI, Kubernetes UID, or cloud resource ID.

Bounty Info

  • I have read and agree to the CONTRIBUTING.md bounty terms
  • Preferred payment method: PayPal; details can be provided privately after maintainer acceptance.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions