Skip to main content

Review Container Security results

After running a scan, you can review the results in the Veracode CLI or review the results in the Veracode Platform. The Veracode Platform provides a visual representation of the severity count of security findings, categorized as critical, high, medium, and low.

note

To access scan results in the Veracode Platform, before scanning, you must set analysis_on_platform to true in your veracode.yml file.

If you scanned in a repo using Veracode Repository Scanning, you can access the results in the following tools:

Review results in the CLI

After you complete a scan using the CLI, your results appear in your command window. If you include the -o flag, the results appear in a new file.

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

Scan results include the following categories of findings:

Review 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".

Example findings in JSON format

The following example scan results show detected vulnerabilities and secrets 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 detected secrets in YAML format

In the following example results, the scan detects secrets titled App ID and App Secret Key in a scanned YML file. Both secrets have a severity of HIGH and are in the Passwords category.

 {
"Class": "secret",
"Secrets": [
{
"Category": "Passwords",
"Code": {
"Lines": [
{
"Annotation": "",
"Content": "enabled: true",
"FirstCause": false,
"Highlighted": "enabled: true",
"IsCause": false,
"LastCause": false,
"Number": 2,
"Truncated": false
},
{
"Annotation": "",
"Content": "values:",
"FirstCause": false,
"Highlighted": "values:",
"IsCause": false,
"LastCause": false,
"Number": 3,
"Truncated": false
},
{
"Annotation": "",
"Content": "***********************",
"FirstCause": true,
"Highlighted": "***********************",
"IsCause": true,
"LastCause": true,
"Number": 4,
"Truncated": false
},
{
"Annotation": "",
"Content": "************************",
"FirstCause": false,
"Highlighted": "************************",
"IsCause": false,
"LastCause": false,
"Number": 5,
"Truncated": false
}
]
},
"EndLine": 4,
"Layer": {},
"Match": "***********************",
"RuleID": "Test for app id",
"Severity": "HIGH",
"StartLine": 4,
"Title": "App ID"
},
{
"Category": "Passwords",
"Code": {
"Lines": [
{
"Annotation": "",
"Content": "values:",
"FirstCause": false,
"Highlighted": "values:",
"IsCause": false,
"LastCause": false,
"Number": 3,
"Truncated": false
},
{
"Annotation": "",
"Content": "***********************",
"FirstCause": false,
"Highlighted": "***********************",
"IsCause": false,
"LastCause": false,
"Number": 4,
"Truncated": false
},
{
"Annotation": "",
"Content": "************************",
"FirstCause": true,
"Highlighted": "************************",
"IsCause": true,
"LastCause": true,
"Number": 5,
"Truncated": false
},
{
"Annotation": "",
"Content": "LOG_LEVEL: info",
"FirstCause": false,
"Highlighted": "LOG_LEVEL: info",
"IsCause": false,
"LastCause": false,
"Number": 6,
"Truncated": false
}
]
},
"EndLine": 5,
"Layer": {},
"Match": "************************",
"RuleID": "test for secrets",
"Severity": "HIGH",
"StartLine": 5,
"Title": "App Secret key"
}
],
"Target": "values-prd.yml"
}

Example findings in table format

Scans with the table format flag display results in four tables: 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

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

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

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****************************************************************