Commit b0d3572
authored
fix(sandbox): patch bundled runtime dependencies (#84)
## Summary
- advances the frozen Debian package snapshot to include the fixed
Bookworm NSS build
- updates the Expo template and document runtime away from vulnerable
archive/glob dependencies
- adds one integrity-locked security overlay for dependency trees
embedded inside npm, pnpm, and code-server
- verifies the resolved NSS and embedded package versions in the
protected snapshot smoke test
## Context
The first Node 24 snapshot run built successfully but Trivy correctly
blocked publication. No Daytona snapshot was created. The scan found
fixed vulnerabilities in Debian NSS, the Expo/document locks, and
dependency trees that npm, pnpm, and code-server bundle internally and
therefore cannot receive ordinary top-level overrides.
## Decisions
| Decision | Choice | Reasoning |
|---|---|---|
| Debian fix | Frozen 2026-07-22 snapshot | This is after libnss3
2:3.87.1-1+deb12u3 first entered Debian Security on July 21 |
| Document runtime | Upgrade archiver to 8.0.0 and unzipper to 0.12.5 |
Removes the old glob/minimatch chain while preserving ExcelJS behavior |
| Expo | Minimal pnpm override and lock update to brace-expansion 5.0.8
| Keeps the generated app graph stable and patched |
| Embedded CLIs/editor | One lockfile-backed runtime security overlay |
npm, pnpm, and code-server ship nested dependency trees that
package-manager overrides do not replace |
| Image layers | Patch in the same layer that installs/extracts upstream
bundles | Vulnerable copies never survive in a committed image layer |
| Scanner input | Remove the package-manager install lock from the
runtime image | The source lock honestly records npm's upstream bundle;
the final image contains only patched files |
## Verification
- [x] original protected image build passed; publication was blocked at
Trivy as designed
- [x] full lint, typecheck, and production build pass under Node 24.18.0
- [x] architecture boundaries, dead-code scan, actionlint, and
shellcheck pass
- [x] Trivy Docker configuration scan: 0 findings
- [x] Trivy lock scans for Expo, document runtime, and security overlay:
0 findings
- [x] npm audits for document runtime and security overlay: 0 findings
- [x] Expo production lock audit: 0 findings
- [x] ExcelJS workbook write/read round trip passes with the upgraded
archive stack
- [x] patched npm, pnpm, and code-server package APIs and exact versions
verified locally
- [ ] protected final-image vulnerability/secret scan and runtime smoke
test after merge
- [ ] Daytona snapshot publication and direct production QA after
promotion
The repository still contains exactly one SQL migration file. This PR
has no database or production data change. No Linear issue or plan
document is associated with this production QA fix.1 parent f62b80b commit b0d3572
8 files changed
Lines changed: 569 additions & 431 deletions
File tree
- .github/workflows
- infra/containers/sandbox
- app-templates/expo
- doc-runtime
- runtime-security-overrides
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
114 | 114 | | |
115 | 115 | | |
116 | 116 | | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
117 | 128 | | |
118 | 129 | | |
119 | 130 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
36 | 39 | | |
37 | 40 | | |
38 | 41 | | |
| 42 | + | |
| 43 | + | |
39 | 44 | | |
40 | 45 | | |
41 | 46 | | |
42 | 47 | | |
43 | 48 | | |
44 | 49 | | |
45 | | - | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
46 | 65 | | |
47 | 66 | | |
48 | 67 | | |
| |||
61 | 80 | | |
62 | 81 | | |
63 | 82 | | |
64 | | - | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
65 | 94 | | |
66 | 95 | | |
67 | 96 | | |
| |||
Lines changed: 6 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
0 commit comments