Skip to content

fix(web): upgrade expat, musl and zlib in the web image - #845

Merged
ValgulNecron merged 1 commit into
masterfrom
fix/web-image-alpine-cves
Nov 8, 2026
Merged

ValgulNecron merged 1 commit into
masterfrom
fix/web-image-alpine-cves

Conversation

@ValgulNecron

@ValgulNecron ValgulNecron commented Nov 7, 2026 •

Copy link
Copy Markdown
Collaborator

Why

Master's publish-edge job "build & push edge image (web)" fails the Trivy scan on both architectures (run 42389380223). There are 7 HIGH CVEs, all with fixes available, and they all come from packages in the nginxinc/nginx-unprivileged:1.31-alpine base image:

Package Installed Fixed CVEs
libexpat 2.9.0-r0 2.10.0-r0 CVE-2026-113351, CVE-2026-115506, CVE-2026-117610, CVE-2026-118370
musl, musl-utils 1.2.6-r2 1.2.6-r3 CVE-2026-107891
zlib 1.3.2-r0 1.3.2-r1 CVE-2026-85091

What

web/Dockerfile now adds these four packages to the apk add line that #816 introduced, with the fixed versions as minimums. That line already runs as root and then switches back to uid 101. I checked the Alpine 3.24 main APKINDEX: it has libexpat 2.10.0-r0, musl/musl-utils 1.2.6-r3 and zlib 1.4-r0.

The scan gate is unchanged. Once the base image is rebuilt upstream, the pins can be removed.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Maintenance
    • Updated bundled system libraries and utilities. The refreshed components are included in the application’s container image.

Master's publish-edge Trivy scan fails the web image on 7 fixed HIGH
CVEs shipped by nginxinc/nginx-unprivileged:1.31-alpine:
libexpat 2.9.0-r0 (CVE-2026-113351, -115506, -117610, -118370),
musl/musl-utils 1.2.6-r2 (CVE-2026-107891) and zlib 1.3.2-r0
(CVE-2026-85091). Add them to the existing apk upgrade line with the
Alpine 3.24 fixed versions as minimums.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Claude <noreply@anthropic.com>
@ValgulNecron ValgulNecron added type: security Security hardening or vulnerability fix area: web React dashboard labels Nov 7, 2026 — with Claude
@ValgulNecron ValgulNecron self-assigned this Nov 7, 2026
@coderabbitai

coderabbitai Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

The web Dockerfile now upgrades additional vulnerable Alpine packages, alongside brotli and curl/libcurl. It continues to switch back to the unprivileged nginx user after installation.

Changes

Web image package upgrades

Layer / File(s) Summary
Upgrade vulnerable image packages
web/Dockerfile
The package installation adds fixed versions of libexpat, musl, musl-utils, and zlib. The existing brotli and curl/libcurl upgrades remain. The Dockerfile still switches back to UID 101 after installation.

Estimated code review effort: 2 (Simple) | ~5 minutes

Change: Bug fix

Possibly related PRs

Suggested labels: type: fix, type: security, type: chore, area: web

Merge Risk: Minimal · up to 1bca7

The required package versions are available for both image architectures. No merge-blocking issue remains identified.

Pre-merge checks: Passed 4

Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly describes the package upgrades in the web image.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Finishing Touches

Generate unit tests (beta)

  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 938a63c and 1bca7a4.

Files selected for processing: 1

  • web/Dockerfile

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

Recent review details

Context from checks skipped due to timeout: 62

  • GitHub Check: go (gameaction / amd64)
  • GitHub Check: go (capture-sidecar / arm64)
  • GitHub Check: go (mcp-server / arm64)
  • GitHub Check: go (svcutil / amd64)
  • GitHub Check: go (mcp-server / amd64)
  • GitHub Check: go (tunnel / amd64)
  • GitHub Check: go (telemetry-receiver / arm64)
  • GitHub Check: go (audit-syslog-bridge / arm64)
  • GitHub Check: go (operator / arm64)
  • GitHub Check: go (svcutil / arm64)
  • GitHub Check: go (capture-sidecar / amd64)
  • GitHub Check: go (tunnel / arm64)
  • GitHub Check: go (telemetryschema / arm64)
  • GitHub Check: go (agent / amd64)
  • GitHub Check: go (telemetry-receiver / amd64)
  • GitHub Check: go (sentinel / amd64)
  • GitHub Check: go (gp-module / amd64)
  • GitHub Check: go (api / amd64)
  • GitHub Check: go (netguard / amd64)
  • GitHub Check: go (gp-module / arm64)
  • GitHub Check: go (agent / arm64)
  • GitHub Check: go (sentinel / arm64)
  • GitHub Check: go (operator / amd64)
  • GitHub Check: go (i18n / amd64)
  • GitHub Check: go (api / arm64)
  • GitHub Check: go (netguard / arm64)
  • GitHub Check: api (postgres)
  • GitHub Check: go (telemetryschema / amd64)
  • GitHub Check: go (gameaction / arm64)
  • GitHub Check: go (gameproto / arm64)
  • GitHub Check: go (audit-syslog-bridge / amd64)
  • GitHub Check: go (gameproto / amd64)
  • GitHub Check: go (i18n / arm64)
  • GitHub Check: lint (tunnel)
  • GitHub Check: lint (gameaction)
  • GitHub Check: lint (api)
  • GitHub Check: lint (test/e2e)
  • GitHub Check: lint (audit-syslog-bridge)
  • GitHub Check: lint (agent)
  • GitHub Check: lint (telemetryschema)
  • GitHub Check: lint (gp-module)
  • GitHub Check: lint (sentinel)
  • GitHub Check: lint (netguard)
  • GitHub Check: lint (svcutil)
  • GitHub Check: lint (capture-sidecar)
  • GitHub Check: lint (i18n)
  • GitHub Check: lint (telemetry-receiver)
  • GitHub Check: lint (mcp-server)
  • GitHub Check: lint (gameproto)
  • GitHub Check: lint (operator)
  • GitHub Check: e2e bucket coverage
  • GitHub Check: go (test/e2e)
  • GitHub Check: web e2e (mock)
  • GitHub Check: standalone Compose smoke
  • GitHub Check: vuln (go)
  • GitHub Check: web
  • GitHub Check: docs and repository checks
  • GitHub Check: build e2e images (arm64)
  • GitHub Check: build e2e images
  • GitHub Check: CodeRabbit
  • GitHub Check: en-XA screenshots (spec 019)
  • GitHub Check: design vs browser visual diff
Additional context used

Code guidelines: 1

AGENTS.md — auto-discovered
Path-based instructions: 1

Source excerpt: **Coverage minimums:** netguard 91, gameaction 91, gameproto 90, telemetryschema 90, i18n 90, gp-module 80, operator 72, api 80, agent 90, svcutil 90; audit-syslog-bridge, telemetry-receiver, sentinel, capture-sidecar, mcp-s...

CodeRabbit inference engine (AGENTS.md)

Files:

  • web/Dockerfile
Learnings: 1

Common learnings

Learnt from: CR
Repo: GameplanePanel/Gameplane PR: 0
File: docs/contributing.md:0-0
Timestamp: 2026-11-03T19:14:22.430Z
Learning: Applicability reference:
AGENTS.md: # Gameplane — AI assistant guide
Architecture, commands, and binding rules for AI agents. Humans: [`README.md`](README.md), [`docs/contributing.md`](docs/contributing.md).

AGENTS.md: # Gameplane — AI assistant guide
## Commands (via Makefile; compile checks excepted, see rule 8)
- **Dev containers:** `make devcontainers` (regenerate every profile and the `website/` and `modules/` copies after editing `.devcontainer/versions.toml`, `.devcontainer/profiles.toml`, `.devcontainer/devcontainer-lock.json`, `.devcontainer/setup.sh` or a `system-deps.toml`), `make check-devcontainers` (drift check). Profile table: `docs/contributing.md`.

Source excerpt:
# Contributing

## CI and workflows

### Security and drift gates

- **`workflow lint`** also runs hadolint over every tracked Dockerfile, failing on any warning (`.hadolint.yaml`). Fix the Dockerfile: pin `apk`/`apt` package versions, and set a `SHELL` with `-o pipefail` before any piped `RUN` step.

@github-actions

github-actions Bot commented Nov 7, 2026

Copy link
Copy Markdown

CI Report - 1bca7a4

run 42395160851 - attempt 1

0 failed - 22 passed - 11 skipped - 37m57s elapsed

Test selection: partial - per-suite table

Coverage

Module Measured Gate Margin
web L95.95 S94.45 B89.33 F91.95 L92 S92 B82 F76 +2.45

Changed

Area Files +/-
web/ 1 +8/-3

Slowest jobs

Job Duration
build e2e images 15m47s
e2e web live / amd64 (kind) 12m14s
e2e web live / arm64 (kind) 10m57s
build e2e images (arm64) 10m1s
e2e postgres / amd64 (kind) 9m41s

e2e buckets run

api-agent, api-auth, api-mods, api-rbac, api-roles, backup-preparation, management-placement, multicluster, operator, optional-components, postgres-availability, restricted-workloads, telemetry, upgrade

@ValgulNecron
ValgulNecron merged commit 31e1d94 into master Nov 8, 2026
106 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: web React dashboard type: security Security hardening or vulnerability fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants