Skip to content

package/{containerd,docker-compose,runc}: security bumps - #35

Open
rschueler wants to merge 3 commits into
skiffos:skifffrom
rschueler:containerd-2.0.11
Open

package/{containerd,docker-compose,runc}: security bumps#35
rschueler wants to merge 3 commits into
skiffos:skifffrom
rschueler:containerd-2.0.11

Conversation

@rschueler

@rschueler rschueler commented Aug 3, 2026

Copy link
Copy Markdown

Three security bumps against the skiff branch. Each is the smallest release that carries the fix, and none crosses a major version.

containerd 2.0.7 → 2.0.11

Three advisories published 2026-07-01, fixed by containerd 2026-07-09 across all maintained branches.

CVE Severity Affected Fixed in
CVE-2026-53488 critical >= 2.0.0, < 2.0.10 2.0.10
CVE-2026-47262 medium >= 2.0.0, < 2.0.10 2.0.10
CVE-2026-46680 medium >= 2.0.4, < 2.0.9 2.0.9

CVE-2026-53488 is the one that matters: the CRI plugin propagates labels from an image config (the LABEL instruction in a Dockerfile) into a context where they reach a command run as root on the host. Pulling an untrusted image is enough.

2.0.11 is the current release of the 2.0.x branch, so this stays within the series already packaged. Moving to 2.3.x would pull in a Go toolchain bump and API changes that are a separate discussion.

docker-compose 2.38.2 → 2.40.2

CVE-2025-62725, CVSS 8.9, CWE-22, EPSS 0.137 (96th percentile).

Compose trusts the path information embedded in remote OCI compose artifacts. When a layer carries the annotations com.docker.compose.extends or com.docker.compose.envfile, Compose joins the attacker-supplied value with its local cache directory and writes there, without constraining the result to that directory.

Two things make this worse than a typical image issue: no container is ever started, so read-only commands such as docker compose config or docker compose ps are enough to trigger it; and it applies to every workflow that resolves remote OCI compose artifacts, CI runners included.

Fixed upstream in v2.40.2 (commit 69bcb96), GHSA-gv8h-7v7w-r22q.

runc 1.3.5 → 1.3.6

CVE-2026-41579, CVSS 3.3, in the container setup path. Low severity, but a patch release inside the 1.3.x series with no interface change — little reason to carry the finding instead.

Verification

Built for pi/4x64 (arm64) against this branch; containerd, containerd-shim-runc-v2 and ctr install into the target as before.

All three are golang-packages whose hashes cover the go-vendored tarball produced by the download post-process, so they cannot be taken from an upstream release page. Each was regenerated by running the package's -source target and reading back the computed hash:

sha256  eadaa5301c0f633f6fed6a3b22f5cf4343ac522401ad2e84bb3299f811a35976  containerd-2.0.11-go2.tar.gz
sha256  b802416067c94abf958544156ca30d4bc9ff99d2b5314012d6c9d6b76f3f1437  docker-compose-2.40.2-go2.tar.gz
sha256  8816e8d4181d13012d16733e837425f5f67df57dfac28bc58a68f7dfcd54291b  runc-1.3.6-go2.tar.gz

The LICENSE hashes are unchanged in all three; verified against the top-level LICENSE in each tarball, not the vendored ones.

Not included: docker-engine / docker-cli

CVE-2026-42306 (7.2) and CVE-2026-41568 (6.1) match the packaged 28.3.3, and it would be natural to bump to the latest 28.x. That does not help. The CVE records list github.com/docker/docker/daemon <= 28.5.2 as affected — there is no fix in the 28 series, only Docker Engine 29.5.1. That is a major version jump and belongs in its own change, not bundled here.

Upstream

Checked buildroot upstream first: master carries containerd 2.1.x, docker-compose 2.38.2 and runc 1.3.5, so there is nothing to cherry-pick for any of the three. These are fork-local bumps.

Fixes three advisories published on 2026-07-01 and addressed by containerd
on 2026-07-09 across all maintained branches:

  CVE-2026-53488  critical  image-config LABEL flows to a host-root command
                            (>= 2.0.0, < 2.0.10)
  CVE-2026-47262  medium    image-triggered runtime DoS via unbounded group
                            parsing (>= 2.0.0, < 2.0.10)
  CVE-2026-46680  medium    user ID handling bypass allows runAsNonRoot
                            evasion (>= 2.0.4, fixed in 2.0.9)

2.0.11 is the current release of the 2.0.x branch, so this stays within the
series already packaged rather than moving to 2.3.x.

Signed-off-by: Rainer Schueler <rainer.schueler@tobrain.org>
@rschueler rschueler changed the title package/containerd: security bump to v2.0.11 package/{containerd,docker-compose,runc}: security bumps Aug 3, 2026
Rainer Schueler added 2 commits August 4, 2026 08:12
CVE-2025-62725 (CVSS 8.9, CWE-22, EPSS 0.137 / 96th percentile) — path
traversal through remote OCI compose artifacts.

When a layer carries the annotations com.docker.compose.extends or
com.docker.compose.envfile, Compose joins the attacker-supplied value
from com.docker.compose.file / com.docker.compose.envfile with its local
cache directory and writes there. The path is never constrained to that
directory, so a crafted artifact can overwrite arbitrary files as the
user running compose.

Two things make this worse than a typical container-image issue: no
container is ever started — resolving the artifact is enough, so
read-only commands such as `docker compose config` or `docker compose ps`
trigger it — and it applies to every workflow that resolves remote OCI
compose artifacts, including CI runners.

Fixed upstream in v2.40.2 (commit 69bcb96), GHSA-gv8h-7v7w-r22q.

Hash regenerated from the go-vendored tarball produced by the download
post-process; the LICENSE hash is unchanged.

Signed-off-by: Rainer Schueler <rainer.schueler@tobrain.org>
CVE-2026-41579 (CVSS 3.3) — affects versions prior to 1.3.6, 1.4.0-rc.1,
1.4.0-rc.12, 1.5.0-rc.1 and 1.5.0-rc.1, in the container setup path.

Low severity, but the bump is a patch release inside the 1.3.x series and
carries no interface change, so there is little reason to carry the
finding instead.

Drops 0001-Replace-os.Is-error-checking-functions-with-their-er.patch.
That patch backported upstream runc 536e183451b7 ("Replace os.Is error
checking functions with their errors.Is counterpart"), which is contained
in 1.3.6 — validator.go, criu_linux.go, device_unix.go and the rest of the
files it touched already use errors.Is. Keeping it makes the build fail at
the patch step, which is how this was found.

The only remaining os.Is* callers in 1.3.6 are integration tests and
vendored third-party code, neither of which the patch addressed.

Hash regenerated from the go-vendored tarball; the LICENSE hash is
unchanged.

Signed-off-by: Rainer Schueler <rainer.schueler@tobrain.org>
rschueler pushed a commit to rschueler/SkiffOS that referenced this pull request Aug 4, 2026
docker-compose 2.38.2 → 2.40.2 closes CVE-2025-62725 (CVSS 8.9), a path
traversal through remote OCI compose artifacts: a crafted layer's
com.docker.compose.extends or .envfile annotation is joined with the local
cache directory without being constrained to it, and resolving the
artifact is enough — no container has to start, so `docker compose config`
triggers it.

runc 1.3.5 → 1.3.6 closes CVE-2026-41579 (3.3) in the container setup
path. Low severity, but a patch release with no interface change.

Both went into skiffos/buildroot#35 alongside the containerd bump.

Not bumped: docker-engine and docker-cli. CVE-2026-42306 (7.2) and
CVE-2026-41568 (6.1) match the packaged 28.3.3, but the records list
github.com/docker/docker/daemon <= 28.5.2 as affected — there is no 28.x
fix, only Engine 29.5.1. A major version jump needs its own change and
its own testing.

These three were invisible to the previous scanner. They only surfaced
after the matching engine moved to grype, which normalises version
strings before matching where NVD's cpeName lookup returned nothing.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant