fix(docker): bump wolfi-base digest to patch openssl CVE-2026-34182 - #31133
Conversation
|
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Greptile SummaryThis PR patches CVE-2026-34182 (openssl remote memory corruption) by re-pinning the
Confidence Score: 5/5Safe to merge — changes are limited to Dockerfile base-image digest bumps and a new read-only CI workflow with no effect on runtime application code. Every Dockerfile change is a one-line digest substitution on a well-understood base image, with no logic changes, no dependency graph alterations, and a Trivy scan on the PR branch confirming the patched image is clean. The new workflow uses pinned action SHAs, a checksummed Trivy binary, and minimal (contents: read) permissions — no supply-chain exposure is introduced. No files require special attention.
|
| Filename | Overview |
|---|---|
| .github/workflows/image-scan.yml | New Trivy-based image scan workflow; pinned checkout and Trivy binary with SHA checksum, minimal permissions, daily schedule plus PR trigger on Dockerfiles and lockfiles. |
| Dockerfile | Bumps both LITELLM_BUILD_IMAGE and LITELLM_RUNTIME_IMAGE digests from sha256:31da6565… to sha256:c61ac691… (openssl 3.6.3-r2, fixes CVE-2026-34182). |
| backend/Dockerfile | Same digest bump as root Dockerfile; unified onto the patched sha256:c61ac691… digest. |
| docker/Dockerfile.database | Previously tracked a divergent digest (sha256:3258be47…); now unified to the patched sha256:c61ac691…. |
| docker/Dockerfile.non_root | Same divergent old digest (sha256:3258be47…) unified to sha256:c61ac691…. |
| gateway/Dockerfile | Digest bumped from sha256:31da6565… to sha256:c61ac691…, in line with other variants. |
| migrations/Dockerfile | Digest bumped from sha256:31da6565… to sha256:c61ac691…, completing the full fleet update. |
Reviews (6): Last reviewed commit: "test(ci): expand image-scan to os,librar..." | Re-trigger Greptile
1 similar comment
1a7577f to
01d0025
Compare
Re-pins LITELLM_BUILD_IMAGE and LITELLM_RUNTIME_IMAGE across all 6 Dockerfiles from the prior digests (openssl 3.6.2-r3) to the current chainguard wolfi-base digest c61ac691 (openssl 3.6.3-r2, >= the fixed 3.6.3-r0). The runtime stage is the shipped image, so the runtime digest is what actually resolves the customer-facing CVE; the build image is bumped too for hygiene. Two Dockerfiles tracked a second equally-stale digest; both are unified onto the patched one.
889cc61 to
4d91d95
Compare
….4) (#196) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/berriai/litellm](https://images.chainguard.dev/directory/image/wolfi-base/overview) ([source](https://github.com/BerriAI/litellm)) | patch | `v1.89.3` → `v1.89.4` | --- ### Release Notes <details> <summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary> ### [`v1.89.4`](https://github.com/BerriAI/litellm/releases/tag/v1.89.4) [Compare Source](BerriAI/litellm@v1.89.4...v1.89.4) ##### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.89.4 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.89.4/cosign.pub \ ghcr.io/berriai/litellm:v1.89.4 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** ##### What's Changed - chore(release): backport [#​31029](BerriAI/litellm#31029) to stable/1.89.x and cut 1.89.4 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31168](BerriAI/litellm#31168) - chore(ui): rebuild dashboard artifacts for stable/1.89.x by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31170](BerriAI/litellm#31170) - chore(release): backport [#​30787](BerriAI/litellm#30787), [#​30788](BerriAI/litellm#30788), [#​31035](BerriAI/litellm#31035), [#​31036](BerriAI/litellm#31036), [#​31122](BerriAI/litellm#31122), [#​31133](BerriAI/litellm#31133) to stable/1.89.x (litellm-enterprise 0.1.42.post2) by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31259](BerriAI/litellm#31259) **Full Changelog**: <BerriAI/litellm@v1.89.3...v1.89.4> ### [`v1.89.4`](https://github.com/BerriAI/litellm/releases/tag/v1.89.4) [Compare Source](BerriAI/litellm@v1.89.3...v1.89.4) ##### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.89.4 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.89.4/cosign.pub \ ghcr.io/berriai/litellm:v1.89.4 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** ##### What's Changed - chore(release): backport [#​31029](BerriAI/litellm#31029) to stable/1.89.x and cut 1.89.4 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31168](BerriAI/litellm#31168) - chore(ui): rebuild dashboard artifacts for stable/1.89.x by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31170](BerriAI/litellm#31170) - chore(release): backport [#​30787](BerriAI/litellm#30787), [#​30788](BerriAI/litellm#30788), [#​31035](BerriAI/litellm#31035), [#​31036](BerriAI/litellm#31036), [#​31122](BerriAI/litellm#31122), [#​31133](BerriAI/litellm#31133) to stable/1.89.x (litellm-enterprise 0.1.42.post2) by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31259](BerriAI/litellm#31259) **Full Changelog**: <BerriAI/litellm@v1.89.3...v1.89.4> </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/London) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMzQuMiIsInVwZGF0ZWRJblZlciI6IjQzLjIzNC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19--> Reviewed-on: https://forgejo.hayden.moe/hayden/phoebe/pulls/196
….4) (#386) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/berriai/litellm](https://images.chainguard.dev/directory/image/wolfi-base/overview) ([source](https://github.com/BerriAI/litellm)) | patch | `v1.89.3` → `v1.89.4` | --- ### Release Notes <details> <summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary> ### [`v1.89.4`](https://github.com/BerriAI/litellm/releases/tag/v1.89.4) [Compare Source](BerriAI/litellm@v1.89.4...v1.89.4) ##### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.89.4 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.89.4/cosign.pub \ ghcr.io/berriai/litellm:v1.89.4 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** ##### What's Changed - chore(release): backport [#​31029](BerriAI/litellm#31029) to stable/1.89.x and cut 1.89.4 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31168](BerriAI/litellm#31168) - chore(ui): rebuild dashboard artifacts for stable/1.89.x by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31170](BerriAI/litellm#31170) - chore(release): backport [#​30787](BerriAI/litellm#30787), [#​30788](BerriAI/litellm#30788), [#​31035](BerriAI/litellm#31035), [#​31036](BerriAI/litellm#31036), [#​31122](BerriAI/litellm#31122), [#​31133](BerriAI/litellm#31133) to stable/1.89.x (litellm-enterprise 0.1.42.post2) by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31259](BerriAI/litellm#31259) **Full Changelog**: <BerriAI/litellm@v1.89.3...v1.89.4> ### [`v1.89.4`](https://github.com/BerriAI/litellm/releases/tag/v1.89.4) [Compare Source](BerriAI/litellm@v1.89.3...v1.89.4) ##### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.89.4 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.89.4/cosign.pub \ ghcr.io/berriai/litellm:v1.89.4 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** ##### What's Changed - chore(release): backport [#​31029](BerriAI/litellm#31029) to stable/1.89.x and cut 1.89.4 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31168](BerriAI/litellm#31168) - chore(ui): rebuild dashboard artifacts for stable/1.89.x by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31170](BerriAI/litellm#31170) - chore(release): backport [#​30787](BerriAI/litellm#30787), [#​30788](BerriAI/litellm#30788), [#​31035](BerriAI/litellm#31035), [#​31036](BerriAI/litellm#31036), [#​31122](BerriAI/litellm#31122), [#​31133](BerriAI/litellm#31133) to stable/1.89.x (litellm-enterprise 0.1.42.post2) by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31259](BerriAI/litellm#31259) **Full Changelog**: <BerriAI/litellm@v1.89.3...v1.89.4> </details> --- ### Configuration 📅 **Schedule**: (in timezone America/New_York) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMzQuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIzNC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19--> Reviewed-on: https://git.greyrock.io/greyrock-labs/home-ops/pulls/386
…erriAI#31133) Re-pins LITELLM_BUILD_IMAGE and LITELLM_RUNTIME_IMAGE across all 6 Dockerfiles from the prior digests (openssl 3.6.2-r3) to the current chainguard wolfi-base digest c61ac691 (openssl 3.6.3-r2, >= the fixed 3.6.3-r0). The runtime stage is the shipped image, so the runtime digest is what actually resolves the customer-facing CVE; the build image is bumped too for hygiene. Two Dockerfiles tracked a second equally-stale digest; both are unified onto the patched one. (cherry picked from commit fda08dd)
…to v1.89.4 (#228) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [https://github.com/BerriAI/litellm.git](https://github.com/BerriAI/litellm) | patch | `v1.89.3` → `v1.89.4` | --- ### Release Notes <details> <summary>BerriAI/litellm (https://github.com/BerriAI/litellm.git)</summary> ### [`v1.89.4`](https://github.com/BerriAI/litellm/releases/tag/v1.89.4) [Compare Source](BerriAI/litellm@v1.89.3...v1.89.4) #### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.89.4 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.89.4/cosign.pub \ ghcr.io/berriai/litellm:v1.89.4 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** #### What's Changed - chore(release): backport [#​31029](BerriAI/litellm#31029) to stable/1.89.x and cut 1.89.4 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31168](BerriAI/litellm#31168) - chore(ui): rebuild dashboard artifacts for stable/1.89.x by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31170](BerriAI/litellm#31170) - chore(release): backport [#​30787](BerriAI/litellm#30787), [#​30788](BerriAI/litellm#30788), [#​31035](BerriAI/litellm#31035), [#​31036](BerriAI/litellm#31036), [#​31122](BerriAI/litellm#31122), [#​31133](BerriAI/litellm#31133) to stable/1.89.x (litellm-enterprise 0.1.42.post2) by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31259](BerriAI/litellm#31259) **Full Changelog**: <BerriAI/litellm@v1.89.3...v1.89.4> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMjAuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIyMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: Renovate Bot <renovate@bhamm-lab.com> Reviewed-on: https://codeberg.org/blake-hamm/bhamm-lab/pulls/228
…erriAI#31133) Re-pins LITELLM_BUILD_IMAGE and LITELLM_RUNTIME_IMAGE across all 6 Dockerfiles from the prior digests (openssl 3.6.2-r3) to the current chainguard wolfi-base digest c61ac691 (openssl 3.6.3-r2, >= the fixed 3.6.3-r0). The runtime stage is the shipped image, so the runtime digest is what actually resolves the customer-facing CVE; the build image is bumped too for hygiene. Two Dockerfiles tracked a second equally-stale digest; both are unified onto the patched one. (cherry picked from commit fda08dd)
Refresh the pinned cgr.dev/chainguard/wolfi-base digest from c61ac6 to 42df77a9 (current wolfi-base:latest, a multi-arch index covering amd64 and arm64). This advances the glibc family from 2.43-r8 to 2.43-r10, with libcrypto3 and libssl3 from 3.6.3-r2 to r3 and libgcc from 16.1.0-r2 to r4; no packages are added or removed. The image scan reports CVE-2026-6791 against glibc 2.43-r8 (fixed in r10). The glibc subpackages are exact-version pinned, so the in-Dockerfile apk upgrade cannot advance them past the base's baked revision, which is why refreshing the digest is required. Same six Dockerfiles as BerriAI#31133
Relevant issues
Customer image scanners (Wiz) block LiteLLM proxy image imports on CVE-2026-34182 in the base image's openssl: libcrypto3 / libssl3 ship at 3.6.2-r3, fixed in 3.6.3-r0.
Linear ticket
LIT-3961
Pre-Submission checklist
make test-unitType
Infrastructure
Changes
Re-pins the wolfi-base digest for
LITELLM_BUILD_IMAGEandLITELLM_RUNTIME_IMAGEacross all six Dockerfiles (root, docker/Dockerfile.database, docker/Dockerfile.non_root, migrations, backend, gateway) from the prior digests (openssl 3.6.2-r3) to the currentcgr.dev/chainguard/wolfi-basedigestc61ac691...(openssl 3.6.3-r2).The runtime stage (
FROM $LITELLM_RUNTIME_IMAGE AS runtime) is the shipped image, so the runtime digest is what actually resolves the customer-facing CVE; the build image is bumped too for hygiene. Two of the Dockerfiles tracked a second, equally-stale digest; both are unified onto the patched one.Proof of fix
OpenSSL in each base image, pulled and inspected directly (same official chainguard/wolfi-base repo):
3.6.3-r2 satisfies the fixed-version condition (>= 3.6.3-r0), so a customer image scan no longer flags it.
Supply-chain provenance
The new digest is a signed, tamper-evident Chainguard image, verified with cosign:
Signer is Chainguard's official image-build workflow (keyless/Fulcio via GitHub Actions OIDC), recorded in the public Rekor transparency log (index 1933426039). Together with the immutable digest pin and the openssl version read directly from the image, this establishes the base image is genuine and carries the fix.