diff --git a/.trivyignore.yaml b/.trivyignore.yaml index 3804fabaa4..3683a23e0a 100644 --- a/.trivyignore.yaml +++ b/.trivyignore.yaml @@ -181,61 +181,27 @@ vulnerabilities: - "pkg:npm/%40modelcontextprotocol%2Fsdk@1.27.1" expired_at: 2027-01-31 - # CVE-2026-84304 is a DoS in grpc-go <= 1.83.0: a peer fragments a gRPC stream into - # millions of tiny HTTP/2 DATA frames until the receiver runs out of heap. Fixed in - # 1.83.1 (published 2026-09-01). Trivy 0.74.0, the latest published release and the - # version the images ship, pins 1.82.1 as an indirect dependency: - # https://github.com/aquasecurity/trivy/blob/v0.74.0/go.mod - # Upstream bump still open: https://github.com/aquasecurity/trivy/pull/11176 - # Trivy only speaks gRPC in client/server mode (`trivy server`, `--server`). Prowler - # invokes it exclusively as `trivy image` and `trivy fs` on a local path, so no gRPC - # listener or connection ever exists in the image and the affected path is not - # reachable. Remove this temporary suppression as soon as a Trivy release pins - # grpc >= 1.83.1. - - id: CVE-2026-84304 + # CVE-2026-78667 and CVE-2026-97031 are DoS bugs in the Go standard library: net/http + # burns CPU parsing a Range header with a large number of small ranges in FileServer, + # ServeContent and ServeFile, and crypto/tls lets a client exhaust server memory with + # multiple ECH outer extension references. Both are server-side code paths. Fixed in + # Go 1.26.9 and 1.27.2 (released 2026-10-08). Trivy 0.75.0, the latest published + # release and the version the images ship, is built with go1.27.1, and Trivy main + # still declares `go 1.27.0`: + # https://github.com/aquasecurity/trivy/blob/v0.75.0/go.mod + # Prowler invokes Trivy exclusively as `trivy fs` and `trivy image` on a local path, + # never `trivy server`, so no HTTP or TLS listener ever exists in the image; its only + # TLS use is as a client pulling the vulnerability database. The purl is pinned to the + # stdlib version so the entry retires itself on the next Trivy bump. Remove this + # temporary suppression as soon as a Trivy release is built with Go >= 1.27.2. + - id: CVE-2026-78667 purls: - - "pkg:golang/google.golang.org/grpc" - expired_at: 2026-10-15 - - # CVE-2026-84445 is a DoS in grpc-go servers built with `xds.NewGRPCServer()`: a request - # carrying neither `:authority` nor `Host` reaches the xDS routing interceptor, which - # indexes an empty slice of authorities and panics. The per-RPC goroutine does not - # recover, so the whole server process dies. Fixed in 1.82.2 and 1.83.2 (published - # 2026-09-08). Trivy 0.74.0, the latest published release and the version the images - # ship, pins 1.82.1 as an indirect dependency: - # https://github.com/aquasecurity/trivy/blob/v0.74.0/go.mod - # Trivy main already carries 1.83.2, but no published release includes it yet. - # The reachability argument is the one made for CVE-2026-84304 above, only narrower: - # this panic needs an xDS-managed gRPC server. Prowler invokes Trivy exclusively as - # `trivy image` and `trivy fs` on a local path, never `trivy server`, so the image runs - # no gRPC server at all, xDS or otherwise. Remove this temporary suppression as soon as - # a Trivy release pins grpc >= 1.83.2. - # https://github.com/advisories/GHSA-2v4p-qf9q-27wj - - id: CVE-2026-84445 + - "pkg:golang/stdlib@v1.27.1" + expired_at: 2026-11-15 + - id: CVE-2026-97031 purls: - - "pkg:golang/google.golang.org/grpc@v1.82.1" - expired_at: 2026-10-15 - - # CVE-2026-56855 and CVE-2026-78662 are DoS deadlocks in x/crypto/ssh: a malicious peer - # can flood or misuse channel messages (RFC 4254) to block the whole connection. - # Fixed in golang.org/x/crypto v0.56.0 (published 2026-09-02). Trivy 0.74.0, the latest - # published release and the version the images ship, still pins v0.55.0, and Trivy main - # has not bumped it either: - # https://github.com/aquasecurity/trivy/blob/v0.74.0/go.mod - # x/crypto/ssh is pulled in transitively through go-git's ssh transport, the same - # dependency chain as the CVE-2026-71556 entry above. Prowler invokes Trivy only with - # `fs` on an existing local path or with `image`; it never asks Trivy to clone over SSH - # or to run `trivy server`, so no SSH connection -- as client or server -- ever exists in - # the image and the affected code path is not reachable. Remove this temporary - # suppression as soon as a fixed Trivy release is available. - - id: CVE-2026-56855 - purls: - - "pkg:golang/golang.org/x/crypto@v0.55.0" - expired_at: 2026-10-15 - - id: CVE-2026-78662 - purls: - - "pkg:golang/golang.org/x/crypto@v0.55.0" - expired_at: 2026-10-15 + - "pkg:golang/stdlib@v1.27.1" + expired_at: 2026-11-15 - id: CVE-2026-56852 purls: diff --git a/Dockerfile b/Dockerfile index dc62fd64a6..1a1ad42c7e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.12.13-slim-trixie@sha256:57cd7c3a7a273101a6485ba99423ee568157882804b1124b4dd04266317710de AS build +FROM python:3.12.15-slim-trixie@sha256:05cda9777409a9c3ffddd94a4c476b79f0769a0b4857f0c7ed9226b6800b0d6f AS build LABEL maintainer="https://github.com/prowler-cloud/prowler" LABEL org.opencontainers.image.source="https://github.com/prowler-cloud/prowler" @@ -8,15 +8,15 @@ ENV POWERSHELL_VERSION=${POWERSHELL_VERSION} # Opt out of PowerShell telemetry (Application Insights -> dc.services.visualstudio.com) ENV POWERSHELL_TELEMETRY_OPTOUT=1 -ARG TRIVY_VERSION=0.74.0 +ARG TRIVY_VERSION=0.75.0 ENV TRIVY_VERSION=${TRIVY_VERSION} ARG ZIZMOR_VERSION=1.24.1 ENV ZIZMOR_VERSION=${ZIZMOR_VERSION} # Pinned here, not fetched with the artefact: a compromised release ships its own checksum. -ARG TRIVY_SHA256_AMD64=2ae6fe3ee734b7fdf11335663e18c75ea12dccc76062f09f164a3b0f8be4371a -ARG TRIVY_SHA256_ARM64=b94ce1976bbf3c15b514b605ee88be7c6d94a29be2302847ff01cb794d47aad5 +ARG TRIVY_SHA256_AMD64=c6e65abddb348e25f10549df887045629cf28cc72453cd1c63acb717316b3f3f +ARG TRIVY_SHA256_ARM64=a1ee9f6ffb7d112b64ff726a2a0717c21175c1114361391f4a132956751a13b3 ARG POWERSHELL_SHA256_AMD64=82a8b13d92b0f3ae48e56cf2f3f7961679371736ca90145ca71617c2913ba9d8 ARG POWERSHELL_SHA256_ARM64=830ebda118c731ece3fa7e6b7e8573a21346387cbbca5b2f5e3b9bfe24f96672 ARG ZIZMOR_SHA256_AMD64=a8000f3c683319a523d3b20df0e75457ba591f049cfcbfa98966631b56733c03 diff --git a/api/Dockerfile b/api/Dockerfile index 2262bd00d6..d19c3c9474 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.12.13-slim-trixie@sha256:57cd7c3a7a273101a6485ba99423ee568157882804b1124b4dd04266317710de AS build +FROM python:3.12.15-slim-trixie@sha256:05cda9777409a9c3ffddd94a4c476b79f0769a0b4857f0c7ed9226b6800b0d6f AS build LABEL maintainer="https://github.com/prowler-cloud/api" @@ -7,15 +7,15 @@ ENV POWERSHELL_VERSION=${POWERSHELL_VERSION} # Opt out of PowerShell telemetry (Application Insights -> dc.services.visualstudio.com) ENV POWERSHELL_TELEMETRY_OPTOUT=1 -ARG TRIVY_VERSION=0.74.0 +ARG TRIVY_VERSION=0.75.0 ENV TRIVY_VERSION=${TRIVY_VERSION} ARG ZIZMOR_VERSION=1.24.1 ENV ZIZMOR_VERSION=${ZIZMOR_VERSION} # Pinned here, not fetched with the artefact: a compromised release ships its own checksum. -ARG TRIVY_SHA256_AMD64=2ae6fe3ee734b7fdf11335663e18c75ea12dccc76062f09f164a3b0f8be4371a -ARG TRIVY_SHA256_ARM64=b94ce1976bbf3c15b514b605ee88be7c6d94a29be2302847ff01cb794d47aad5 +ARG TRIVY_SHA256_AMD64=c6e65abddb348e25f10549df887045629cf28cc72453cd1c63acb717316b3f3f +ARG TRIVY_SHA256_ARM64=a1ee9f6ffb7d112b64ff726a2a0717c21175c1114361391f4a132956751a13b3 ARG POWERSHELL_SHA256_AMD64=82a8b13d92b0f3ae48e56cf2f3f7961679371736ca90145ca71617c2913ba9d8 ARG POWERSHELL_SHA256_ARM64=830ebda118c731ece3fa7e6b7e8573a21346387cbbca5b2f5e3b9bfe24f96672 ARG ZIZMOR_SHA256_AMD64=a8000f3c683319a523d3b20df0e75457ba591f049cfcbfa98966631b56733c03 diff --git a/api/changelog.d/api-image-trivy-0-75-0.security.md b/api/changelog.d/api-image-trivy-0-75-0.security.md new file mode 100644 index 0000000000..4d5759d29c --- /dev/null +++ b/api/changelog.d/api-image-trivy-0-75-0.security.md @@ -0,0 +1 @@ +Python base image from 3.12.13 to 3.12.15 and Trivy from 0.74.0 to 0.75.0 in the API container image, patching CVE-2026-19445, CVE-2026-19553 and the grpc-go and x/crypto CVEs bundled in Trivy diff --git a/mcp_server/Dockerfile b/mcp_server/Dockerfile index 7dad9e1303..db57306dfb 100644 --- a/mcp_server/Dockerfile +++ b/mcp_server/Dockerfile @@ -25,34 +25,20 @@ RUN --mount=type=cache,target=/root/.cache/uv \ # ============================================================================= # Final stage - Minimal runtime environment # ============================================================================= -FROM python:3.13.14-alpine3.23@sha256:9fdbf2e3e82628351513560b121e2ee6ce31cac212be9e070c5a5e2769fb5e76 +FROM python:3.13.16-alpine3.23@sha256:07b20c774a247152e74f622034c1482495d299e070eec620ddff13e01264290b LABEL maintainer="https://github.com/prowler-cloud" -# High CVEs fixed in Alpine 3.23 but not yet in the pinned base image: -# sqlite-libs 3.53.4-r0 CVE-2026-11822, CVE-2026-11824 (image ships 3.51.2-r0) -# libcrypto3/libssl3 3.5.8-r0 CVE-2026-14456 (image ships 3.5.7-r0) -# libuuid 2.41.6-r1 CVE-2026-53612, -53613, -53614, -76642, -78408, -78410 -# (image ships 2.41.4-r0; -78408 is the one that needs -r1 rather than -r0) -# The base image pins python 3.13.14, which has not been rebuilt since those -# packages were published, so the upgrade is taken here rather than by moving -# the pin -- the newest published python:3.13-alpine3.23 carries the same -# vulnerable versions. libcrypto3 and libssl3 are both built from openssl and -# are flagged separately, so both are named. -# `>=` rather than `=`: Alpine keeps only the newest build of a package in a -# branch's index, so an exact pin breaks this build the day one of these is -# superseded. Drop an entry once the base image ships that version or later. -RUN apk add --no-cache --upgrade \ - "sqlite-libs>=3.53.4-r0" \ - "libcrypto3>=3.5.8-r0" \ - "libssl3>=3.5.8-r0" \ - "libuuid>=2.41.6-r1" - # Create non-root user for security # Using specific UID/GID for consistency across environments RUN addgroup -g 1001 prowler && \ adduser -D -u 1001 -G prowler prowler +# pip is build-only; the entrypoint runs the venv directly. +RUN rm -rf /usr/local/lib/python3.13/site-packages/pip \ + /usr/local/lib/python3.13/site-packages/pip-*.dist-info \ + /usr/local/bin/pip /usr/local/bin/pip3 /usr/local/bin/pip3.13 + WORKDIR /app USER prowler diff --git a/mcp_server/changelog.d/mcp-image-python-3-13-16.security.md b/mcp_server/changelog.d/mcp-image-python-3-13-16.security.md new file mode 100644 index 0000000000..c926794e3e --- /dev/null +++ b/mcp_server/changelog.d/mcp-image-python-3-13-16.security.md @@ -0,0 +1 @@ +Python from 3.13.14 to 3.13.16 in the MCP container image, patching CVE-2026-19445 and CVE-2026-19553 diff --git a/prowler/changelog.d/sdk-image-trivy-0-75-0.security.md b/prowler/changelog.d/sdk-image-trivy-0-75-0.security.md new file mode 100644 index 0000000000..0a54879ed0 --- /dev/null +++ b/prowler/changelog.d/sdk-image-trivy-0-75-0.security.md @@ -0,0 +1 @@ +Python base image from 3.12.13 to 3.12.15 and Trivy from 0.74.0 to 0.75.0 in the SDK container image, patching CVE-2026-19445, CVE-2026-19553 and the grpc-go and x/crypto CVEs bundled in Trivy