Trivy vulnerability scanning
- 11 minutes read - 2185 wordsI build (and therefore) manage many container images. It’s easy (common?) to overlook that these images contain vulnerabilities, hopefully vulns that are fixed and that the images must be rebuilt to accommodate these changes.
I have used Google’s very expensive container vulnerability scanning tool but wanted something cheaper. I found this list of open source solutions on Reddit and decided to look into Trivy.
It’s possible to install Trivy via a package manager, a binary or to build the Go binary locally but I prefer to use containers whenever possible:
PODMAN_SOCKET="/var/run/user/1000/podman/podman.sock"
podman run \
--interactive --tty --rm \
--volume=${HOME}/trivy/cache/:/root/.cache/ \
--volume=${PODMAN_SOCKET}:/podman.sock \
aquasec/trivy:latest \
--image-src=podman \
--podman-host=/podman.sock \
image \
--format=table \
--scanners=vuln \
--ignore-unfixed \
${IMAGE}:${TAG}
Or:
function trivy {
local PODMAN_SOCKET="/var/run/user/1000/podman/podman.sock"
podman run \
--interactive --tty --rm \
--volume=${HOME}/trivy/cache/:/root/.cache/ \
--volume=${PODMAN_SOCKET}:/podman.sock \
aquasec/trivy:latest "$@"
}
As you can see, I’m using (prefer) Podman and needed a socket (/var/run/user/1000/podman/podman.sock
) for Trivy:
systemctl --user enable --now podman.socket
And a 5-year old python:3.4-alpine image:
podman pull docker.io/library/python:3.4-alpine
trivy \
--image-src=podman \
--podman-host=/podman.sock \
image \
--format=table \
--scanners=vuln \
--ignore-unfixed \
docker.io/library/python:3.4-alpine
2024-09-18T17:42:36Z INFO [vuln] Vulnerability scanning is enabled
2024-09-18T17:42:36Z INFO Detected OS family="alpine" version="3.9.2"
2024-09-18T17:42:36Z INFO [alpine] Detecting vulnerabilities... os_version="3.9" repository="3.9" pkg_num=28
2024-09-18T17:42:36Z INFO Number of language-specific files num=1
2024-09-18T17:42:36Z INFO [python-pkg] Detecting vulnerabilities...
2024-09-18T17:42:36Z WARN This OS version is no longer supported by the distribution family="alpine" version="3.9.2"
2024-09-18T17:42:36Z WARN The vulnerability detection may be insufficient because security updates are not provided
docker.io/library/python:3.4-alpine (alpine 3.9.2)
Total: 37 (UNKNOWN: 0, LOW: 4, MEDIUM: 16, HIGH: 13, CRITICAL: 4)
┌──────────────┬────────────────┬──────────┬────────┬───────────────────┬───────────────┬──────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Status │ Installed Version │ Fixed Version │ Title │
├──────────────┼────────────────┼──────────┼────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ expat │ CVE-2018-20843 │ HIGH │ fixed │ 2.2.6-r0 │ 2.2.7-r0 │ expat: large number of colons in input makes parser consume │
│ │ │ │ │ │ │ high amount... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2018-20843 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-15903 │ │ │ │ 2.2.7-r1 │ expat: heap-based buffer over-read via crafted XML input │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-15903 │
├──────────────┼────────────────┼──────────┤ ├───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ libbz2 │ CVE-2019-12900 │ CRITICAL │ │ 1.0.6-r6 │ 1.0.6-r7 │ bzip2: out-of-bounds write in function BZ2_decompress │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-12900 │
├──────────────┼────────────────┼──────────┤ ├───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ libcrypto1.1 │ CVE-2019-1543 │ HIGH │ │ 1.1.1a-r1 │ 1.1.1b-r1 │ openssl: ChaCha20-Poly1305 with long nonces │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-1543 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2020-1967 │ │ │ │ 1.1.1g-r0 │ openssl: Segmentation fault in SSL_check_chain causes denial │
│ │ │ │ │ │ │ of service │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2020-1967 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2021-23840 │ │ │ │ 1.1.1j-r0 │ openssl: integer overflow in CipherUpdate │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-23840 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2021-3450 │ │ │ │ 1.1.1k-r0 │ openssl: CA certificate check bypass with │
│ │ │ │ │ │ │ X509_V_FLAG_X509_STRICT │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-3450 │
│ ├────────────────┼──────────┤ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-1547 │ MEDIUM │ │ │ 1.1.1d-r0 │ openssl: side-channel weak encryption vulnerability │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-1547 │
│ ├────────────────┤ │ │ │ ├──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-1549 │ │ │ │ │ openssl: information disclosure in fork() │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-1549 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-1551 │ │ │ │ 1.1.1d-r2 │ openssl: Integer overflow in RSAZ modular exponentiation on │
│ │ │ │ │ │ │ x86_64 │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-1551 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2020-1971 │ │ │ │ 1.1.1i-r0 │ openssl: EDIPARTYNAME NULL pointer de-reference │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2020-1971 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2021-23841 │ │ │ │ 1.1.1j-r0 │ openssl: NULL pointer dereference in │
│ │ │ │ │ │ │ X509_issuer_and_serial_hash() │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-23841 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2021-3449 │ │ │ │ 1.1.1k-r0 │ openssl: NULL pointer dereference in signature_algorithms │
│ │ │ │ │ │ │ processing │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-3449 │
│ ├────────────────┼──────────┤ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-1563 │ LOW │ │ │ 1.1.1d-r0 │ openssl: information disclosure in PKCS7_dataDecode and │
│ │ │ │ │ │ │ CMS_decrypt_set1_pkey │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-1563 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2021-23839 │ │ │ │ 1.1.1j-r0 │ openssl: incorrect SSLv2 rollback protection │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-23839 │
├──────────────┼────────────────┼──────────┤ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ libssl1.1 │ CVE-2019-1543 │ HIGH │ │ │ 1.1.1b-r1 │ openssl: ChaCha20-Poly1305 with long nonces │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-1543 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2020-1967 │ │ │ │ 1.1.1g-r0 │ openssl: Segmentation fault in SSL_check_chain causes denial │
│ │ │ │ │ │ │ of service │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2020-1967 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2021-23840 │ │ │ │ 1.1.1j-r0 │ openssl: integer overflow in CipherUpdate │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-23840 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2021-3450 │ │ │ │ 1.1.1k-r0 │ openssl: CA certificate check bypass with │
│ │ │ │ │ │ │ X509_V_FLAG_X509_STRICT │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-3450 │
│ ├────────────────┼──────────┤ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-1547 │ MEDIUM │ │ │ 1.1.1d-r0 │ openssl: side-channel weak encryption vulnerability │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-1547 │
│ ├────────────────┤ │ │ │ ├──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-1549 │ │ │ │ │ openssl: information disclosure in fork() │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-1549 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-1551 │ │ │ │ 1.1.1d-r2 │ openssl: Integer overflow in RSAZ modular exponentiation on │
│ │ │ │ │ │ │ x86_64 │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-1551 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2020-1971 │ │ │ │ 1.1.1i-r0 │ openssl: EDIPARTYNAME NULL pointer de-reference │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2020-1971 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2021-23841 │ │ │ │ 1.1.1j-r0 │ openssl: NULL pointer dereference in │
│ │ │ │ │ │ │ X509_issuer_and_serial_hash() │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-23841 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2021-3449 │ │ │ │ 1.1.1k-r0 │ openssl: NULL pointer dereference in signature_algorithms │
│ │ │ │ │ │ │ processing │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-3449 │
│ ├────────────────┼──────────┤ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-1563 │ LOW │ │ │ 1.1.1d-r0 │ openssl: information disclosure in PKCS7_dataDecode and │
│ │ │ │ │ │ │ CMS_decrypt_set1_pkey │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-1563 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2021-23839 │ │ │ │ 1.1.1j-r0 │ openssl: incorrect SSLv2 rollback protection │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-23839 │
├──────────────┼────────────────┼──────────┤ ├───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ musl │ CVE-2019-14697 │ CRITICAL │ │ 1.1.20-r4 │ 1.1.20-r5 │ musl libc through 1.1.23 has an x87 floating-point stack │
│ │ │ │ │ │ │ adjustment im ...... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-14697 │
│ ├────────────────┼──────────┤ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2020-28928 │ MEDIUM │ │ │ 1.1.20-r6 │ In musl libc through 1.2.1, wcsnrtombs mishandles particular │
│ │ │ │ │ │ │ combinati ... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2020-28928 │
├──────────────┼────────────────┼──────────┤ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ musl-utils │ CVE-2019-14697 │ CRITICAL │ │ │ 1.1.20-r5 │ musl libc through 1.1.23 has an x87 floating-point stack │
│ │ │ │ │ │ │ adjustment im ...... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-14697 │
│ ├────────────────┼──────────┤ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2020-28928 │ MEDIUM │ │ │ 1.1.20-r6 │ In musl libc through 1.2.1, wcsnrtombs mishandles particular │
│ │ │ │ │ │ │ combinati ... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2020-28928 │
├──────────────┼────────────────┼──────────┤ ├───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ sqlite-libs │ CVE-2019-8457 │ CRITICAL │ │ 3.26.0-r3 │ 3.28.0-r0 │ sqlite: heap out-of-bound read in function rtreenode() │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-8457 │
│ ├────────────────┼──────────┤ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-19244 │ HIGH │ │ │ 3.28.0-r2 │ sqlite: allows a crash if a sub-select uses both DISTINCT │
│ │ │ │ │ │ │ and window... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-19244 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-5018 │ │ │ │ 3.28.0-r0 │ sqlite: Use-after-free in window function leading to remote │
│ │ │ │ │ │ │ code execution │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-5018 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2020-11655 │ │ │ │ 3.28.0-r3 │ sqlite: malformed window-function query leads to DoS │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2020-11655 │
│ ├────────────────┼──────────┤ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-16168 │ MEDIUM │ │ │ 3.28.0-r1 │ sqlite: Division by zero in whereLoopAddBtreeIndex in │
│ │ │ │ │ │ │ sqlite3.c │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-16168 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-19242 │ │ │ │ 3.28.0-r2 │ sqlite: SQL injection in sqlite3ExprCodeTarget in expr.c │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-19242 │
└──────────────┴────────────────┴──────────┴────────┴───────────────────┴───────────────┴──────────────────────────────────────────────────────────────┘
2024-09-18T17:42:36Z INFO Table result includes only package filenames. Use '--format json' option to get the full path to the package file.
Python (python-pkg)
Total: 6 (UNKNOWN: 0, LOW: 0, MEDIUM: 2, HIGH: 4, CRITICAL: 0)
┌───────────────────────┬────────────────┬──────────┬────────┬───────────────────┬───────────────┬─────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Status │ Installed Version │ Fixed Version │ Title │
├───────────────────────┼────────────────┼──────────┼────────┼───────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤
│ pip (METADATA) │ CVE-2019-20916 │ HIGH │ fixed │ 19.0.3 │ 19.2 │ python-pip: directory traversal in _download_http_url() │
│ │ │ │ │ │ │ function in src/pip/_internal/download.py │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-20916 │
│ ├────────────────┼──────────┤ │ ├───────────────┼─────────────────────────────────────────────────────────────┤
│ │ CVE-2021-3572 │ MEDIUM │ │ │ 21.1 │ python-pip: Incorrect handling of unicode separators in git │
│ │ │ │ │ │ │ references │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-3572 │
│ ├────────────────┤ │ │ ├───────────────┼─────────────────────────────────────────────────────────────┤
│ │ CVE-2023-5752 │ │ │ │ 23.3 │ pip: Mercurial configuration injectable in repo revision │
│ │ │ │ │ │ │ when installing via pip │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2023-5752 │
├───────────────────────┼────────────────┼──────────┤ ├───────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤
│ setuptools (METADATA) │ CVE-2022-40897 │ HIGH │ │ 40.8.0 │ 65.5.1 │ pypa-setuptools: Regular Expression Denial of Service │
│ │ │ │ │ │ │ (ReDoS) in package_index.py │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-40897 │
│ ├────────────────┤ │ │ ├───────────────┼─────────────────────────────────────────────────────────────┤
│ │ CVE-2024-6345 │ │ │ │ 70.0.0 │ pypa/setuptools: Remote code execution via download │
│ │ │ │ │ │ │ functions in the package_index module in... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2024-6345 │
├───────────────────────┼────────────────┤ │ ├───────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤
│ wheel (METADATA) │ CVE-2022-40898 │ │ │ 0.33.1 │ 0.38.1 │ python-wheel: remote attackers can cause denial of service │
│ │ │ │ │ │ │ via attacker controlled input... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-40898 │
└───────────────────────┴────────────────┴──────────┴────────┴───────────────────┴───────────────┴─────────────────────────────────────────────────────────────┘
Versus:
docker.io/library/python:3.9.20-alpine
2024-09-18T18:18:43Z INFO [vuln] Vulnerability scanning is enabled
2024-09-18T18:18:44Z INFO [python] License acquired from METADATA classifiers may be subject to additional terms name="pip" version="23.0.1"
2024-09-18T18:18:44Z INFO [python] License acquired from METADATA classifiers may be subject to additional terms name="setuptools" version="58.1.0"
2024-09-18T18:18:45Z INFO Detected OS family="alpine" version="3.20.3"
2024-09-18T18:18:45Z INFO [alpine] Detecting vulnerabilities... os_version="3.20" repository="3.20" pkg_num=37
2024-09-18T18:18:45Z INFO Number of language-specific files num=1
2024-09-18T18:18:45Z INFO [python-pkg] Detecting vulnerabilities...
docker.io/library/python:3.9.20-alpine (alpine 3.20.3)
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
2024-09-18T18:18:45Z INFO Table result includes only package filenames. Use '--format json' option to get the full path to the package file.
Python (python-pkg)
Total: 3 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 2, CRITICAL: 0)
┌───────────────────────┬────────────────┬──────────┬────────┬───────────────────┬───────────────┬──────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Status │ Installed Version │ Fixed Version │ Title │
├───────────────────────┼────────────────┼──────────┼────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────┤
│ pip (METADATA) │ CVE-2023-5752 │ MEDIUM │ fixed │ 23.0.1 │ 23.3 │ pip: Mercurial configuration injectable in repo revision │
│ │ │ │ │ │ │ when installing via pip │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2023-5752 │
├───────────────────────┼────────────────┼──────────┤ ├───────────────────┼───────────────┼──────────────────────────────────────────────────────────┤
│ setuptools (METADATA) │ CVE-2022-40897 │ HIGH │ │ 58.1.0 │ 65.5.1 │ pypa-setuptools: Regular Expression Denial of Service │
│ │ │ │ │ │ │ (ReDoS) in package_index.py │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-40897 │
│ ├────────────────┤ │ │ ├───────────────┼──────────────────────────────────────────────────────────┤
│ │ CVE-2024-6345 │ │ │ │ 70.0.0 │ pypa/setuptools: Remote code execution via download │
│ │ │ │ │ │ │ functions in the package_index module in... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2024-6345 │
└───────────────────────┴────────────────┴──────────┴────────┴───────────────────┴───────────────┴──────────────────────────────────────────────────────────┘
There’s also a GitHub Actions trivy-action
that I’m now incorporating into my container builds.