Vulnerability Scanning
Trivy detects known vulnerabilities according to the versions of installed packages.
The following packages are supported.
OS Packages
Trivy is capable of automatically detecting installed OS packages when scanning container images, VM images and running hosts.
Note
Trivy doesn't support third-party/self-compiled packages/binaries, but official packages provided by vendors such as Red Hat and Debian.
Supported OS
See here for the supported OSes.
Data Sources
OS | Source |
---|---|
Arch Linux | Vulnerable Issues |
Alpine Linux | secdb |
Wolfi Linux | secdb |
Chainguard | secdb |
Amazon Linux | Amazon Linux Security Center |
Debian | Security Bug Tracker / OVAL |
Ubuntu | Ubuntu CVE Tracker |
RHEL/CentOS | OVAL / Security Data |
AlmaLinux | AlmaLinux Product Errata |
Rocky Linux | Rocky Linux UpdateInfo |
Oracle Linux | OVAL |
CBL-Mariner | OVAL |
OpenSUSE/SLES | CVRF |
Photon OS | Photon Security Advisory |
Data Source Selection
Trivy only consumes security advisories from the sources listed in the above table.
As for packages installed from OS package managers (dpkg
, yum
, apk
, etc.), Trivy uses the advisory database from the appropriate OS vendor.
For example: for a python package installed from yum
(Amazon linux), Trivy will only get advisories from ALAS.
But for a python package installed from another source (e.g. pip
), Trivy will get advisories from the GitLab
and GitHub
databases.
This advisory selection is essential to avoid getting false positives because OS vendors usually backport upstream fixes, and the fixed version can be different from the upstream fixed version.
Severity Selection
The severity is taken from the selected data source since the severity from vendors is more accurate. Using CVE-2023-0464 as an example, while it is rated as "HIGH" in NVD, Red Hat has marked its 'Impact' as "Low". As a result, Trivy will display it as "Low".
The severity depends on the compile option, the default configuration, etc. NVD doesn't know how the vendor distributes the software. Red Hat evaluates the severity more accurately. That's why Trivy prefers vendor scores over NVD.
If the data source does not provide a severity, the severity is determined based on the CVSS score as follows:
Base Score Range | Severity |
---|---|
0.1-3.9 | Low |
4.0-6.9 | Medium |
7.0-8.9 | High |
9.0-10.0 | Critical |
If the CVSS score is also not provided, it falls back to NVD, and if NVD does not have severity, it will be UNKNOWN.
Unfixed Vulnerabilities
The unfixed/unfixable vulnerabilities mean that the patch has not yet been provided on their distribution.
To hide unfixed/unfixable vulnerabilities, you can use the --ignore-unfixed
flag.
Language-specific Packages
Supported Languages
See here for the supported languages.
Data Sources
Language | Source | Commercial Use | Delay1 |
---|---|---|---|
PHP | PHP Security Advisories Database | ✅ | - |
GitHub Advisory Database (Composer) | ✅ | - | |
Python | GitHub Advisory Database (pip) | ✅ | - |
Open Source Vulnerabilities (PyPI) | ✅ | - | |
Ruby | Ruby Advisory Database | ✅ | - |
GitHub Advisory Database (RubyGems) | ✅ | - | |
Node.js | Ecosystem Security Working Group | ✅ | - |
GitHub Advisory Database (npm) | ✅ | - | |
Java | GitLab Advisories Community | ✅ | 1 month |
GitHub Advisory Database (Maven) | ✅ | - | |
Go | GitHub Advisory Database (Go) | ✅ | - |
Rust | Open Source Vulnerabilities (crates.io) | ✅ | - |
.NET | GitHub Advisory Database (NuGet) | ✅ | - |
C/C++ | GitLab Advisories Community | ✅ | 1 month |
Dart | GitHub Advisory Database (Pub) | ✅ | - |
Elixir | GitHub Advisory Database (Erlang) | ✅ | - |
Swift | GitHub Advisory Database (Swift) | ✅ | - |
Database
Trivy downloads the vulnerability database every 6 hours. Trivy uses two types of databases for vulnerability detection:
- Vulnerability Database
- Java Index Database
This page provides detailed information about these databases.
Vulnerability Database
Trivy utilizes a database containing vulnerability information. This database is built every six hours on GitHub and is distributed via GitHub Container registry (GHCR). The database is cached and updated as needed. As Trivy updates the database automatically during execution, users don't need to be concerned about it.
For CLI flags related to the database, please refer to this page.
Private Hosting
If you host the database on your own OCI registry, you can specify a different repository with the --db-repository
flag.
The default is ghcr.io/aquasecurity/trivy-db
.
$ trivy image --db-repository YOUR_REPO YOUR_IMAGE
If authentication is required, it can be configured in the same way as for private images. Please refer to the documentation for more details.
Java Index Database
This database is only downloaded when scanning JAR files so that Trivy can identify the groupId, artifactId, and version of JAR files. It is built once a day on GitHub and distributed via GitHub Container registry (GHCR). Like the vulnerability database, it is automatically downloaded and updated when needed, so users don't need to worry about it.
Private Hosting
If you host the database on your own OCI registry, you can specify a different repository with the --java-db-repository
flag.
The default is ghcr.io/aquasecurity/trivy-java-db
.
If authentication is required, you need to run docker login YOUR_REGISTRY
.
Currently, specifying a username and password is not supported.
-
https://github.com/GoogleContainerTools/distroless ↩