Apply Debian's security patches in the cell's image - #47
Merged
Merged
Conversation
The `image scan and SBOM` job failed on `master` and on every open PR: Trivy reported `CVE-2026-14456` in `libssl3t64` as a fixable High, and no rebuild of this repository could clear it. `ruby:3.4-slim` ships `3.5.6-1~deb13u2` while the fix `3.5.7-1~deb13u2` is already in `trixie-security`, so `--pull` cannot reach it until [docker-library/ruby](https://github.com/docker-library/ruby) rebuilds the tag. Run `apt-get upgrade` in the installed `Dockerfile` after the `FROM`, so the image's patch level is its own rather than upstream's release cadence. That stops the class rather than this advisory: the next one to land ahead of a tag rebuild would have failed the same way. An upgrade leaves an existing application's `Dockerfile` alone, so a cell installed before this needs the line added by hand and the image rebuilt. ref: #46 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Applies current Debian security updates when building newly installed HotCell images, preventing fixable vulnerabilities in stale upstream base tags from failing CI.
Changes:
- Adds an
apt-get upgradelayer with package-list cleanup. - Tests the generated Dockerfile for the upgrade command.
- Documents the behavior and migration step for existing installations.
Tip
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or run gh pr ready --undo.
Click "Ready for review" or run gh pr ready to reengage.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
hotcell-client/lib/hot_cell/install/Dockerfile.tt |
Applies Debian package updates during image builds. |
hotcell-client/test/install_test.rb |
Verifies the installed Dockerfile includes the upgrade. |
CHANGELOG.md |
Documents the security update behavior and existing-installation migration. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
image scan and SBOMjob failed onmasterand on every open PR. Trivy reportedCVE-2026-14456inlibssl3t64as a fixable High, and no rebuild of this repository could clear it:ruby:3.4-slimships3.5.6-1~deb13u2while the fix3.5.7-1~deb13u2is already intrixie-security, so--pullinbin/example-imagecannot reach it until docker-library/ruby rebuilds the tag. The gate stayed red on work that had nothing to do with it, which is the outcome.github/workflows/ci.ymlsays it does not want.Run
apt-get upgradein the installedDockerfileafter theFROM, so the image's patch level is its own rather than upstream's release cadence. That stops the class rather than this advisory: the next one to land ahead of a tag rebuild would have failed the same way. Waiting for the base rebuild leaves every unrelated PR red until upstream ships and recurs on the next advisory, and a.trivyignoreentry, defensible on its own since a cell runsnetwork: noneand is not a QUIC server, works against the reasonignore-unfixedis in the workflow: only a vulnerability a rebuild can fix is supposed to block. Pinning the upgrade to openssl alone is narrower and worse, because the next CVE is in a different package.Before and after, with the flags CI passes (
--severity HIGH,CRITICAL --ignore-unfixed --exit-code 1) against imagesbin/example-imagebuilt:hotcell-client/test/install_test.rbholds the line, next to theOMP_NUM_THREADSguard from e5f8596 and for the same reason: the failure only appears in a built image, so the scaffold's own text is what a test can hold. The upgrade sits above thechmod a-ssweep, so the setuid assertion in the same job still finds nothing.One bound on the claim: the upgrade layer caches on the base image's digest, so a local rebuild the day after a fresh advisory reuses it and can be a patch behind until
--no-cache. CI builds on a runner with no cache, so the gate itself is honest.An upgrade leaves an existing application's
Dockerfilealone, so a cell installed before this needs the line added by hand and the image rebuilt.CHANGELOG.mdsays so.ref: #46
[Fix #46]
🤖 Generated with Claude Code