Skip to main content

Review Container and IaC Scan findings

After you complete a Veracode Container Security scan, your results appear in your command window. If you include the -o flag, the results appear in a new file. Scan results include the following categories of findings:

To specify the output format of the scan results, such as JSON, CycloneDX, or a table, include the --format flag.

Policy evaluations

Veracode Container Security performs a basic policy evaluation against the findings. If the scan identifies any of the following findings, it returns "policy-passed": false.

  • Known vulnerabilities, configuration issues in infrastructure as code (IaC) files, or exposed secrets with a very high or high severity.
  • Any Docker CIS Benchmark violation.
  • Any insecure file permissions.

If none of those findings are present, the scan returns "policy-passed": true. If the scan was run without a policy, the scan returns "policy-passed": "not evaluated".

Container and IaC Security findings on Veracode Platform

You can access the results of container and IaC scans, performed from the CLI, on the Veracode Platform. The Veracode Platform provides a visual representation of the severity count of scan findings, categorized as critical, high, medium, and low.

Additional features include:

  • Search and filter
  • Scan history for each asset to help you track changes in findings reported
  • Mitigation guidance for each finding

The Container and IaC Analysis documentation page provides detailed information on using the Veracode Platform to analyse container and IaC scan results.

Users with Container and IaC analysis permissions can perform scan and review actions.

Vulnerability data sources

Veracode Container Security uses several data sources when reporting vulnerability findings, including:

In some cases, the severity Veracode reports for a CVE differs from the severity from the NVD. When a more specific source, such as a base image vulnerability database, provides a severity for a CVE, that more specific source takes precedence.

The vulnerability and policy databases are updated every 24 hours.

Example JSON findings

This sample output is the result of a scan request in readable JSON format:

./veracode scan --type image --source alpine:latest --policy container-policy-v1.rego --format json --output alpine.json

{
"vulnerabilities": {
"descriptor": {
"db": {
"built": "2025-12-11T08:19:01Z",
"from": "https://grype.anchore.io/databases/v6/vulnerability-db_v6.1.3_2025-12-10T15:02:03Z_1765441141.tar.zst?checksum=sha256%3A95bd5b5950ac069e4a0033a803c2682762650f73dbcb4a70c275edea9ba6b982",
"path": "/var/folders/y4/rvg41kfn5t5d7swxjmdvmj8r0000gn/T/veracode_cli_cache/6/vulnerability.db",
"schemaVersion": "v6.1.3",
"valid": true
},
"name": "",
"timestamp": "2025-12-12T14:37:46.565139+05:30",
"version": ""
},
"matches": [
{
"artifact": {
"cpes": [
"cpe:2.3:a:busybox:busybox:1.37.0-r18:*:*:*:*:*:*:*"
],
"id": "cfbeef858806724b",
"language": "",
"licenses": [
"GPL-2.0-only"
],
"locations": [
{
"accessPath": "/lib/apk/db/installed",
"annotations": {
"evidence": "primary"
},
"layerID": "sha256:1231a673589ac9e2f8a98ed916d1fa8301b36a44dd14fc40eba5a05905da69f1",
"path": "/lib/apk/db/installed"
}
],
"metadata": {
"files": [
{
"path": "/bin"
},
{
"path": "/bin/busybox"
},
{
"path": "/etc"
},
{
"path": "/etc/securetty"
},
{
"path": "/etc/busybox-paths.d"
},
{
"path": "/etc/busybox-paths.d/busybox"
},
{
"path": "/etc/logrotate.d"
},
{
"path": "/etc/logrotate.d/acpid"
},
{
"path": "/etc/network"
},
{
"path": "/etc/network/if-down.d"
},
{
"path": "/etc/network/if-post-down.d"
},
{
"path": "/etc/network/if-post-up.d"
},
{
"path": "/etc/network/if-pre-down.d"
},
{
"path": "/etc/network/if-pre-up.d"
},
{
"path": "/etc/network/if-up.d"
},
{
"path": "/etc/network/if-up.d/dad"
},
{
"path": "/etc/udhcpc"
},
{
"path": "/etc/udhcpc/udhcpc.conf"
},
{
"path": "/sbin"
},
{
"path": "/usr"
},
{
"path": "/usr/sbin"
},
{
"path": "/usr/share"
},
{
"path": "/usr/share/udhcpc"
},
{
"path": "/usr/share/udhcpc/default.script"
}
]
},
"metadataType": "ApkMetadata",
"name": "busybox",
"purl": "pkg:apk/alpine/[email protected]?arch=aarch64\u0026distro=alpine-3.22.0",
"type": "apk",
"upstreams": [
{
"name": "busybox"
}
],
"version": "1.37.0-r18"
},
"customerPolicyResult": {
"DataSource": "https://nvd.nist.gov/vuln/detail/CVE-2024-58251",
"ID": "CVE-2024-58251",
"Msg": "Found Low software vulnerability: CVE-2024-58251, baseScore: 2.5",
"Severity": "Low",
"Status": "failed"
},
"matchDetails": [
{
"fix": {
"suggestedVersion": "1.37.0-r20"
},
"found": {
"versionConstraint": "\u003c 1.37.0-r20 (apk)",
"vulnerabilityID": "CVE-2024-58251"
},
"matcher": "apk-matcher",
"searchedBy": {
"distro": {
"type": "alpine",
"version": "3.22.0"
},
"namespace": "alpine:distro:alpine:3.22",
"package": {
"name": "busybox",
"version": "1.37.0-r18"
}
},
"type": "exact-direct-match"
},
{
"fix": {
"suggestedVersion": "1.37.0-r20"
},
"found": {
"versionConstraint": "\u003c 1.37.0-r20 (apk)",
"vulnerabilityID": "CVE-2024-58251"
},
"matcher": "apk-matcher",
"searchedBy": {
"distro": {
"type": "alpine",
"version": "3.22.0"
},
"namespace": "alpine:distro:alpine:3.22",
"package": {
"name": "busybox",
"version": "1.37.0-r18"
}
},
"type": "exact-indirect-match"
}
],
"relatedVulnerabilities": [
{
"cvss": [
{
"metrics": {
"baseScore": 2.5,
"exploitabilityScore": 1.1,
"impactScore": 1.5
},
"source": "[email protected]",
"type": "Secondary",
"vector": "CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:L",
"vendorMetadata": {},
"version": "3.1"
}
],
"cwes": [
{
"cve": "CVE-2024-58251",
"cwe": "CWE-150",
"source": "[email protected]",
"type": "Secondary"
}
],
"dataSource": "https://nvd.nist.gov/vuln/detail/CVE-2024-58251",
"description": "In netstat in BusyBox through 1.37.0, local users can launch of network application with an argv[0] containing an ANSI terminal escape sequence, leading to a denial of service (terminal locked up) when netstat is used by a victim.",
"epss": [
{
"cve": "CVE-2024-58251",
"date": "2025-12-10",
"epss": 0.0002,
"percentile": 0.04396
}
],
"id": "CVE-2024-58251",
"namespace": "nvd:cpe",
"severity": "Low",
"urls": [
"https://bugs.busybox.net/show_bug.cgi?id=15922",
"https://www.busybox.net",
"https://www.busybox.net/downloads/",
"http://www.openwall.com/lists/oss-security/2025/04/23/6"
]
}
],
"vulnerability": {
"advisories": [],
"cvss": [
{
"metrics": {
"baseScore": 2.5,
"exploitabilityScore": 1.1,
"impactScore": 1.5
},
"source": "[email protected]",
"type": "Secondary",
"vector": "CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:L",
"vendorMetadata": {},
"version": "3.1"
}
],
"cwes": [
{
"cve": "CVE-2024-58251",
"cwe": "CWE-150",
"source": "[email protected]",
"type": "Secondary"
}
],
"dataSource": "https://security.alpinelinux.org/vuln/CVE-2024-58251",
"epss": [
{
"cve": "CVE-2024-58251",
"date": "2025-12-10",
"epss": 0.0002,
"percentile": 0.04396
}
],
"fix": {
"available": [
{
"date": "2025-11-22",
"kind": "first-observed",
"version": "1.37.0-r20"
}
],
"state": "fixed",
"versions": [
"1.37.0-r20"
]
},
"id": "CVE-2024-58251",
"namespace": "alpine:distro:alpine:3.22",
"risk": 0.0055000000000000005,
"severity": "Low",
"urls": []
}
}
]
},
"secrets": [],
"configs": [
{
"AVDID": "AVD-DS-0002",
"CauseMetadata": {
"Code": {
"Lines": []
},
"Provider": "Dockerfile",
"Service": "general"
},
"Description": "Running containers with 'root' user can lead to a container escape situation. It is best practice to run containers as non-root users, which can be done by adding a 'USER' statement to the Dockerfile.",
"ID": "DS002",
"Message": "Specify at least one USER command in Dockerfile with non-root user as argument",
"Namespace": "builtin.dockerfile.DS002",
"PrimaryURL": "https://avd.aquasec.com/misconfig/ds002",
"Query": "data.builtin.dockerfile.DS002.deny",
"References": [
"https://docs.docker.com/develop/develop-images/dockerfile_best-practices/",
"https://avd.aquasec.com/misconfig/ds002"
],
"Resolution": "Add 'USER \u003cnon root user name\u003e' line to the Dockerfile",
"Severity": "HIGH",
"Status": "FAIL",
"Target": "alpine:latest",
"Title": "Image user should not be 'root'",
"Type": "Dockerfile Security Check",
"customerPolicyResult": {
"Status": "passed"
}
},
{
"AVDID": "AVD-DS-0026",
"CauseMetadata": {
"Code": {
"Lines": []
},
"Provider": "Dockerfile",
"Service": "general"
},
"Description": "You should add a HEALTHCHECK instruction in your Docker container images to perform the health check on running containers.",
"ID": "DS026",
"Message": "Add HEALTHCHECK instruction in your Dockerfile",
"Namespace": "builtin.dockerfile.DS026",
"PrimaryURL": "https://avd.aquasec.com/misconfig/ds026",
"Query": "data.builtin.dockerfile.DS026.deny",
"References": [
"https://blog.aquasec.com/docker-security-best-practices",
"https://avd.aquasec.com/misconfig/ds026"
],
"Resolution": "Add HEALTHCHECK instruction in Dockerfile",
"Severity": "LOW",
"Status": "FAIL",
"Target": "alpine:latest",
"Title": "No HEALTHCHECK defined",
"Type": "Dockerfile Security Check",
"customerPolicyResult": {
"Status": "passed"
}
}
],
"policy-results": null,
"policy-passed": "failed"
}

Example table findings

Scans with the table format flag display results in four sections: Vulnerabilities, Misconfigurations, Secrets, and Policy Results. Each section provides details, such as the type and severity, of each finding.

veracode scan --type image --source alpine --format table --policy container-policy-v1.rego

Vulnerabilities example

Policy StatusNameInstalledFixed-inTypeVulnerabilitySeverityMessage
Failedlibcrypto33.3.2-r43.3.5-r0apkCVE-2025-9230HIGH
Failedlibssl33.3.2-r43.3.5-r0apkCVE-2025-9230HIGH
Failedmusl1.2.5-r81.2.5-r9apkCVE-2025-26519HIGH
Failedmusl-utils1.2.5-r81.2.5-r9apkCVE-2025-26519HIGH
Failedlibcrypto33.3.2-r43.3.3-r0apkCVE-2024-12797MEDIUM
Passedlibcrypto33.3.2-r43.3.2-r5apkCVE-2024-13176MEDIUM
Failedlibcrypto33.3.2-r43.3.5-r0apkCVE-2025-9231MEDIUM
Failedlibcrypto33.3.2-r43.3.5-r0apkCVE-2025-9232MEDIUM
Failedlibssl33.3.2-r43.3.3-r0apkCVE-2024-12797MEDIUM
Passedlibssl33.3.2-r43.3.2-r5apkCVE-2024-13176MEDIUM
Failedlibssl33.3.2-r43.3.5-r0apkCVE-2025-9231MEDIUM
Failedlibssl33.3.2-r43.3.5-r0apkCVE-2025-9232LOW
Passedbusybox1.37.0-r91.37.0-r14apkCVE-2024-58251LOW
Passedbusybox1.37.0-r91.37.0-r14apkCVE-2025-46394LOW
Passedbusybox-binsh1.37.0-r91.37.0-r14apkCVE-2024-58251LOW
Passedbusybox-binsh1.37.0-r91.37.0-r14apkCVE-2025-46394LOW
Passedssl_client1.37.0-r91.37.0-r14apkCVE-2024-58251LOW
Passedssl_client1.37.0-r91.37.0-r14apkCVE-2025-46394LOW

Misconfigurations example

Policy StatusTitleProviderIDSeverityMessage
FailedCOPY '--from' referring to the current imageDockerfileDS006CRITICAL
FailedMultiple ENTRYPOINT instructions listedDockerfileDS007CRITICAL
FailedExposed port out of rangeDockerfileDS008CRITICAL
FailedRUN using 'sudo'DockerfileDS010CRITICAL
FailedCOPY with more than two arguments not ending with slashDockerfileDS011CRITICAL
FailedDuplicate aliases defined in different FROMsDockerfileDS012CRITICAL
FailedSecrets passed via build-args or envs or copied secret filesDockerfileDS031CRITICAL
FailedImage user should not be 'root'DockerfileDS002HIGH
FailedWORKDIR path not absoluteDockerfileDS009HIGH
Failed'yum clean all' missingDockerfileDS015HIGH
FailedMultiple CMD instructions listedDockerfileDS016HIGH
Failed'RUN update' instruction aloneDockerfileDS017HIGH
Failed'dnf clean all' missingDockerfileDS019HIGH
Failed'zypper clean' missingDockerfileDS020HIGH
Failed'apt-get' missing '-y' to avoid manual inputDockerfileDS021HIGH
FailedDeprecated MAINTAINER usedDockerfileDS022HIGH
Failed'apk add' is missing '--no-cache'DockerfileDS025HIGH
Failed'microdnf clean all' missingDockerfileDS027HIGH
Failed'apt-get' missing '--no-install-recommends'DockerfileDS029HIGH
FailedWORKDIR should not be mounted on system dirsDockerfileDS030HIGH
Passed':latest' tag usedDockerfileDS001MEDIUM
PassedPort 22 exposedDockerfileDS004MEDIUM
Passed'RUN cd ...' to change directoryDockerfileDS013MEDIUM
PassedMultiple HEALTHCHECK definedDockerfileDS023MEDIUM
PassedNo HEALTHCHECK definedDockerfileDS026LOWAdd HEALTHCHECK instruction in your Dockerfile
PassedADD instead of COPYDockerfileDS005LOW
PassedRUN using 'wget' and 'curl'DockerfileDS014LOW

Secrets example

Policy StatusFileSecret TypeSeverityMessage
Passedaws-credentials.txtAWS Access Key IDCRITICALaws_access_key_id=********************
Passedaws-credentials.txtAWS Secret Access KeyCRITICALaws_secret_access_key=****************************************
Passedid_rsaAsymmetric Private KeyHIGH****************************************************************