Container security testing: SAST, DAST, image scanning, and runtime validation in 2026

By
Minimus
August 11, 2026

Container security testing is the program-level practice of validating a containerized workload across five stages: pre-commit, build, registry, admission, and runtime. Each stage maps to specific NIST SP 800-190 controls. This guide covers what each stage tests, the leading 2026 tools per stage, and how to cut false-positive volume so the alerts left on the on-call queue actually deserve attention.

This guide presents a five-stage framework for testing containerized workloads across source, build, registry, admission, and runtime environments.

Key Takeaways

  • This guide organizes container security testing into five operational stages: pre-commit, build, registry, admission, and runtime. NIST SP 800-190 discusses risks and countermeasures across container images, registries, orchestrators, runtimes, and hosts, but it does not define this five-stage testing pipeline.
  • Container vulnerability scanning is the build-time core. It compares the image's SBOM against CVE feeds (NIST NVD, OSV, and GitHub Security Advisories) and reports findings per CVSS. Per Aqua Security's 2024 Annual Cloud Native Security Report, 28,000 CVEs were disclosed during 2024, and a typical public image carries 50–60 of those at ship time per Minimus platform data.
  • The fastest way to cut false-positive volume is layered filtering with VEX (CISA VEX guidance, 2023), reachability data from eBPF sensors, and CISA's Known Exploited Vulnerabilities (KEV) catalog augmented by EPSS.
  • Hardened, minimal base images shrink the input the rest of the pipeline has to chase. Standard public images carry 50–60 CVEs and 15–20 high or critical (Minimus platform data); minimal source-built images ship with a fraction of that surface.

What Container Security Testing Is and What It Tests

Container security testing is the practice of validating a containerized workload against named security controls across five surfaces. The scope covers the image, its dependencies, its deployment manifests, and its runtime behavior. NIST SP 800-190 §4.1.1 and §4.4 enumerate the control objectives for image integrity and runtime risk respectively.

The Five Testing Surfaces: Image, IaC, Runtime, Network, Identity

The image surface covers package CVEs, Dockerfile misconfigurations, and embedded secrets. IaC covers Helm charts, Kustomize overlays, and Terraform. Runtime covers syscall and process telemetry from the live container. Network covers L3 and L7 flows between pods (Calico, Cilium Hubble). Identity covers ServiceAccount tokens, OIDC federation, and the secrets the workload pulls at startup.

Container Security Testing vs. Vulnerability Scanning vs. CNAPP Posture Management

Container security testing is the umbrella program. Container vulnerability scanning is the build-time slice that checks the image's SBOM against CVE feeds. CNAPP posture management adds cloud-account context (IAM, S3, and KMS) and runs continuously. A team that buys a CNAPP and skips pre-commit, admission, or runtime tools still ships a partial program.

Why Container Security Testing Matters in 2026

Three forces made container security testing a baseline control by 2026: the CVE disclosure rate, the Mean Time to CVE (MTTC) gap between standard and minimal images, and the audit-evidence cadence required by FedRAMP, PCI, and STIG-aligned programs.

The 28,000-CVE-per-Year Baseline

Aqua Security's 2024 Annual Cloud Native Security Report counted 28,000 new CVEs disclosed during 2024. A standard public image carries 50–60 of those at ship time, with 15–20 rated high or critical per Minimus platform data. Without build-time scanning, those CVEs enter production untracked.

Mean Time to CVE (MTTC) Gap Between Standard and Minimal Images

Mean Time to CVE measures how long, on average, a deployed image waits before its next CVE disclosure hits. Minimus internal benchmarks place MTTC for standard images near 17 days and for hardened minimal images near 64 days, a 3.7× reduction in CVE arrival frequency.

Audit-Evidence Requirements Driving Testing Cadence

FedRAMP CM-6, PCI-DSS v4.0 §6.3.2, and STIG-aligned packages require a documented testing cadence per artifact. The 3PAO expects scan reports, admission-policy logs, and runtime alerts tied to image digests, not vendor PDFs. That evidence requirement drives the 77.6% of DevSecOps teams reporting weekly-or-faster image scans in the 2024 SANS DevSecOps Survey.

The Five-Stage Container Security Testing Pipeline

The container security testing pipeline runs as five sequential stages. Each stage owns a class of risk the next cannot see.

Stage 1: Pre-Commit (Dockerfile Linting and Secret Scanning)

Pre-commit testing runs in the developer's environment or as a Git hook. Hadolint lints the Dockerfile for misconfigurations such as running as root, :latest tags, and missing USER directives. Gitleaks and TruffleHog scan the staged diff for embedded secrets. The goal is fail-fast feedback before the build job spins up.

Stage 2: Build-Time (Image Vulnerability Scanning)

Build-time scanning runs against the freshly built image. Trivy, Grype (paired with Syft for SBOM), Clair, Snyk Container, and Docker Scout all produce CVE reports keyed to image digest. This stage maps to NIST SP 800-190 §4.1.1, which requires an accurate inventory of software components per image.

Stage 3: Registry (Signature Verification, SBOM Diff, Base-Image Policy)

Signing, attestation, registry policy, and promotion controls can be applied after build and before deployment. The exact enforcement point depends on the CI/CD and registry architecture.

Cosign and Notation sign image manifests; an SBOM diff against the prior digest surfaces newly introduced packages; a base-image policy rejects pushes from an unapproved upstream. Sigstore's Rekor log records every signature.

Stage 4: Admission (Kyverno or OPA Gatekeeper Policy Gates)

Admission testing runs inside the cluster as a validating webhook. Kyverno or OPA Gatekeeper rejects pods that fail policy: unsigned images, missing readOnlyRootFilesystem, privileged mode, and hostPath mounts. NIST SP 800-204C and Kyverno's published policy library cover the control language.

Stage 5: Runtime (Falco-Class Behavioral Detection)

Runtime testing observes the live container. Falco, Tetragon, and Tracee read syscalls via eBPF or kernel modules and fire when behavior diverges from policy. NIST SP 800-190 §4.4 covers the threats: in-memory exploits, container escapes (CVE-2024-21626 runC "Leaky Vessels"), and lateral movement via service-account tokens.

Container Vulnerability Scanning Explained (the Build-Time Core)

Container vulnerability scanning generates an SBOM from a built image, matches every component against CVE feeds, and produces a severity-ranked findings list per image digest. It is the build-time core of container security testing, not the whole program. For background, see open source vulnerability scanners with hardened images.

How Container Vulnerability Scanners Work

A scanner reads the image filesystem layer by layer, extracts package metadata (OS packages, language packages, application dependencies), and compares each version against feeds: NIST's NVD, Google's OSV, GitHub Security Advisories, and Linux distribution security trackers. Output is one finding per matched CVE, ranked by CVSSv3 base score.

When to Scan: Every Commit, Every Push, Every Release

Scan at three points: every commit (catches new CVEs against the working tree), every push to the registry (catches CVEs that landed between commit and push), and every release. Re-scan production images daily because new CVEs are disclosed against unchanged code.

SBOM-Aware Scanning vs. Filesystem Fingerprinting

SBOM-aware scanners (Grype + Syft, Trivy with --sbom) read the published SBOM in CycloneDX or SPDX format and match directly. Filesystem fingerprinting scanners re-walk the image. SBOM-aware is faster and reproducible; fingerprinting catches packages installed outside the package manager. Use both for high-assurance pipelines, per OWASP's Container Vulnerability Scanning guidance.

Common Vulnerabilities Surfaced by Container Security Testing

Four classes of finding dominate the output of a real container security testing pipeline.

Inherited CVEs from Base Images

Most CVEs in a typical image come from the base. A node:20 or python:3.12 from Docker Hub pulls Debian or Alpine packages the application never touches at runtime. Per Minimus platform data, that overhead averages 50–60 CVEs per image, 15–20 of them high or critical.

Misconfigurations (Running as Root, No readOnlyRootFilesystem)

Pod specs that omit runAsNonRoot: true, readOnlyRootFilesystem: true, or allowPrivilegeEscalation: false surface at the admission stage. CIS Kubernetes Benchmark v1.8 controls 5.2.x cover these.

Secret Leakage via Embedded Files or Env Vars

Hardcoded API keys, .env files baked into images, and JWT signing keys committed to source are routine findings. Gitleaks and TruffleHog catch most at pre-commit; Trivy --scanners secret catches the rest.

Container Escape Vectors

CVE-2024-21626 (runC "Leaky Vessels," CVSS 8.6) and CVE-2021-44228 (Log4Shell, CVSSv3 10.0, CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H) showed how a vulnerable component plus CAP_SYS_ADMIN or a mounted Docker socket lets a container escape to the host (MITRE ATT&CK for Containers T1611). Testing across all five stages closes the path.

Container Security Testing Tools by Stage

The 2026 tooling field groups cleanly by stage. The table below names the leading tool in each row, its license, and one finding class it catches.

Stage Tool License One Finding Class Detected
Pre-commit Hadolint GPL-3.0 Dockerfile rule violations (DL3007 :latest)
Pre-commit Gitleaks MIT AWS access keys in staged diff
Pre-commit TruffleHog AGPL-3.0 Verified credentials in Git history
Build / scan Trivy Apache-2.0 OS and language-package CVEs
Build / scan Grype + Syft Apache-2.0 SBOM-driven CVE matches
Build / scan Clair Apache-2.0 OS package CVEs (registry-side)
Build / scan Snyk Container Commercial Application-dep CVEs with fix advice
Build / scan Docker Scout Commercial CVE policy gates in Docker Desktop
Registry Cosign + Rekor Apache-2.0 Unsigned artifacts
Registry Notation Apache-2.0 OCI signature verification
Admission Kyverno Apache-2.0 Unsigned image admission
Admission OPA Gatekeeper Apache-2.0 Rego policy violations
Admission Polaris Apache-2.0 Pod security best-practice drift
Runtime Falco Apache-2.0 T1611 escape behavior
Runtime Tetragon Apache-2.0 In-kernel enforcement on syscalls
Runtime Tracee Apache-2.0 ptrace privilege escalation (T1055.009)


License and detection notes verified against each project's repository as of April 2026.

Implementing Container Security Testing in CI/CD

A CI/CD container security testing pipeline runs the five stages as ordered jobs: build, scan, sign, push, and deploy. Block on new high or critical CVEs in net-new releases; alert (do not block) on existing CVEs in maintenance releases.

GitHub Actions Reference Workflow

A minimal GitHub Actions job builds the image, runs Trivy with --severity HIGH,CRITICAL --exit-code 1, signs the digest with cosign sign, pushes to the registry, and then triggers a Kyverno-gated deploy. Pin action versions (aquasecurity/trivy-action@0.24.0, sigstore/cosign-installer@v3.5.0) so a malicious upstream tag cannot rewrite the workflow.

GitLab CI Reference Workflow

GitLab CI exposes the same flow via Container-Scanning.gitlab-ci.yml plus Dependency-Scanning.gitlab-ci.yml. The built-in scanner is Trivy-based; the report uploads as gl-container-scanning-report.json for the Security Dashboard. Sign via a Cosign job in the release stage.

Argo Workflows Reference for GitOps Shops

Argo Workflows runs the build → scan → sign → push DAG as a WorkflowTemplate, and Argo CD watches a Git-managed policy library for admission. The same Kyverno or OPA policies enforce at admission, so the cluster never accepts an image that bypassed the workflow.

Failing the Build vs. Blocking the Deploy

I draw the line at admission. The build fails on new high or critical CVEs introduced by the diff; the admission webhook blocks any image that is unsigned, lacks an SBOM, or violates Pod Security Standards. Existing CVEs alert the on-call without breaking the release train.

Reducing False Positives in Container Security Testing

The largest operational cost in container security testing is triaging false positives. Three controls, in order, drop the queue size most.

VEX Statements for Non-Exploitable CVEs

A VEX statement is a machine-readable assertion (affected, not_affected, fixed, under_investigation) that filters CVEs the vendor has triaged as non-exploitable. CISA's 2023 VEX guidance defines the schema. Scanners that read VEX (Trivy --vex, Grype --vex-documents) drop suppressed findings from the queue.

Reachability-Based Severity Scoping

Reachability scoping uses eBPF runtime correlation to mark CVEs in code paths the workload never executes as low priority. Cilium Tetragon, Sysdig Secure, and Datadog Cloud Security all produce reachability data. A 9.8 CVSS finding in a function the binary does not link is operationally low.

KEV-Aware Prioritization

CISA's Known Exploited Vulnerabilities catalog lists CVEs under active exploit. Pair it with EPSS for a probability-of-exploit score. A KEV-listed CVE with EPSS ≥ 0.7 jumps to the top of the queue regardless of CVSS base score; everything else rides the normal cadence.

Compliance Mapping for Container Security Testing Programs

Auditors expect a one-to-one mapping from the testing pipeline to named control numbers. See Minimus alignment with NIST SP 800-190 for the full mapping; the table below names the controls most often cited per stage.

Stage NIST SP 800-190 CIS Kubernetes v1.8 PCI-DSS v4.0 / FedRAMP
Build (SBOM and scan) §4.1.1 5.1.x (image policy) PCI 6.3.2; FedRAMP CM-6
Registry (signing) §4.1.4 5.1.6 (no :latest) FedRAMP SI-7
Admission (policy gates) §4.3.2 5.2.x (Pod Security) FedRAMP CM-7, SC-7
Runtime (behavioral) §4.4 5.7.x (default-deny) FedRAMP SI-4


Map each control to a generated artifact (SBOM, Cosign attestation, Kyverno admission log, and Falco alert) so the 3PAO sees evidence per digest, not vendor claims.

Container Security Testing Best Practices

In the regulated clusters I have audited, these ten practices separate working programs from theater.

  1. Scan every layer, not just the final image.
  2. Block on new high or critical CVEs in net-new releases; alert on existing.
  3. Sign every artifact with Cosign or Notation; verify on admission.
  4. Use minimal, source-built base images so the scanner surfaces real risk, not unused-package noise.
  5. Generate a CycloneDX or SPDX SBOM per digest and store it alongside the image.
  6. Publish VEX for every CVE the team has triaged as non-exploitable.
  7. Run admission policy in audit mode for two weeks before enforcing.
  8. Re-scan production images daily.
  9. Gate KEV-listed findings to a same-week SLA.
  10. Treat the runtime sensor's false-positive rate as a budget; cut image-side noise first.

Common Mistakes in Container Security Testing Programs

Three patterns show up in nearly every failed audit I have walked.

Treating "Scan Passed" as "Secure"

A passing Trivy scan only proves the image had no known CVEs at the moment it ran. It says nothing about admission policy, runtime behavior, or zero-days disclosed an hour later.

Letting CVE Backlogs Run Open Without VEX or KEV Filtering

Teams that publish a CVE dashboard without VEX, KEV, or EPSS context end up triaging hundreds of findings no attacker will ever use. The triage cost exceeds the remediation cost.

Testing the Image but Not the Deploy Manifests

A clean image deployed with privileged: true, a mounted Docker socket, and runAsUser: 0 is one T1611 escape away from compromise. IaC and admission tests are not optional.

How Minimus Reduces the Load on Container Security Testing Programs

Minimus provides hardened container images intended to reduce unnecessary packages and inherited build-time vulnerability findings. This may reduce vulnerability-management workload, but it does not automatically reduce admission-policy violations or behavioral runtime alerts, which depend on deployment configuration, enabled policies, workload activity, and sensor tuning. Verify the exact SBOM, VEX, signature, remediation-policy, and vulnerability-intelligence claims before publication. Any comparative reduction figures should be labeled as vendor-reported and accompanied by a reproducible methodology; see Minimus vulnerability intelligence. Browse the gallery at images.minimus.io or read the platform docs at docs.minimus.io.

FAQ — Container Security Testing

What Is Container Security Testing?

Container security testing is the practice of validating a containerized workload across five stages: pre-commit, build, registry, admission, and runtime. The scope covers the image, its dependencies, its deployment manifests, and its runtime behavior. The program maps to NIST SP 800-190 §4.1 and §4.4 and uses a layered toolchain such as Hadolint, Trivy, Cosign, Kyverno, and Falco to enforce policy per stage.

What Is the Difference Between Container Security Testing and Container Vulnerability Scanning?

Container vulnerability scanning is the build-time slice that compares an image's SBOM against CVE feeds. Container security testing is the program-level umbrella that adds pre-commit linting, registry signing, admission policy, and runtime detection. Scanning alone misses everything outside the image filesystem.

How Often Should Container Images Be Scanned?

Scan newly built images before promotion, scan registry pushes or releases according to the delivery workflow, and periodically re-evaluate deployed image digests as advisory data changes. The appropriate frequency should reflect release cadence, exposure, asset criticality, and compliance requirements. The image is static after build; the CVE feed is not. 77.6% of DevSecOps teams report weekly-or-faster scans per the 2024 SANS DevSecOps Survey.

How Does Container Security Testing Fit Into CI/CD?

A typical GitHub Actions, GitLab CI, or Argo Workflows pipeline runs build, scan, sign, push, and deploy in order. The build fails on new high or critical CVEs; an admission webhook (Kyverno or OPA Gatekeeper) blocks any image at deploy time that is unsigned or violates Pod Security Standards.

Can Container Security Testing Detect Zero-Day Vulnerabilities?

Build-time scanners cannot detect zero-days by definition; there is no CVE record to match. Runtime sensors such as Falco, Tetragon, and Tracee can detect zero-day exploitation by flagging anomalous syscalls, processes, or network flows even when the underlying CVE has no public advisory. Pair scanning with runtime detection to cover both classes.

Minimus
Minimus
Sign up for minimus

Avoid over 97% of container CVEs

Access hundreds of hardened images, secure Helm charts, the Minimus custom image builder, and more.