fix(security): update vulnerable deps in agent and api-proxy images#6505
Conversation
There was a problem hiding this comment.
Pull request overview
Updates container dependencies to remediate security scan findings while preserving multi-architecture releases.
Changes:
- Pins secure GitHub CLI, Node.js, npm, and curl versions.
- Removes vulnerable npm 10.x installations from the agent image.
- Refreshes API proxy base images during release builds.
Show a summary per file
| File | Description |
|---|---|
containers/agent/Dockerfile |
Installs and holds patched toolchain versions. |
containers/api-proxy/Dockerfile |
Pins patched Node, npm, and curl versions. |
.github/workflows/release.yml |
Pulls fresh API proxy base images during releases. |
Review details
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 3/3 changed files
- Comments generated: 0
- Review effort level: Medium
|
✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟 |
|
✅ Contribution Check completed successfully! Contribution check complete: the PR has a clear description, references a related issue, keeps changes in the expected files, and does not introduce new user-facing functionality that would require added tests or docs under CONTRIBUTING.md. |
|
✅ Smoke Copilot BYOK AOAI (Entra) completed. Copilot AOAI BYOK (Entra) mode operational. 🔓 |
|
📡 Smoke OTel Tracing completed. All tracing scenarios validated. ✅ |
|
🛡️ Smoke Copilot Network Isolation confirmed the egress allowlist is enforced. ✅ |
|
🔌 Smoke Services — All services reachable! ✅ |
|
✅ Smoke Gemini completed. All facets verified. 💎 Smoke tests complete. Results reported via PR comment. Overall status: FAIL |
|
✅ Smoke Copilot BYOK completed. Copilot BYOK mode operational. 🔓 |
|
❌ Security Guard failed. Please review the logs for details. |
|
Chroot tests passed! Smoke Chroot - All security and functionality tests succeeded. |
|
✅ Smoke Claude passed |
|
✅ Smoke Copilot BYOK AOAI (api-key) completed. Copilot AOAI BYOK (api-key) mode operational. 🔓 |
|
📰 VERDICT: Smoke Docker Sbx has concluded. All systems operational. This is a developing story. 🎤 |
|
📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤 |
|
🔑 Smoke Copilot PAT PAT auth validated. All systems operational. ✅ |
|
📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤 |
|
❌ Security Guard failed. Please review the logs for details. |
|
✅ Smoke Copilot BYOK completed. Copilot BYOK mode operational. 🔓 |
|
🔌 Smoke Services — All services reachable! ✅ |
|
Chroot tests passed! Smoke Chroot - All security and functionality tests succeeded. |
|
✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟 |
|
✅ Smoke Claude passed |
|
📰 VERDICT: Smoke Docker Sbx has concluded. All systems operational. This is a developing story. 🎤 |
|
🛡️ Smoke Copilot Network Isolation confirmed the egress allowlist is enforced. ✅ |
|
❌ Smoke Copilot BYOK AOAI (api-key) reports failed. AOAI BYOK (api-key) mode investigation needed... Smoke test PASS: MCP connectivity ✅, GitHub.com connectivity ✅, File I/O ✅, BYOK inference ✅. Running in direct BYOK mode via api-proxy → Azure OpenAI (Foundry) |
|
✅ Smoke Gemini completed. All facets verified. 💎 |
|
✅ Contribution Check completed successfully! No comment needed: the PR description is clear, references #6504, and the changes are organized under the expected directories. No applicable CONTRIBUTING.md issues were found that warrant a review comment. |
|
Smoke Test: Copilot BYOK (Direct) Mode — PASS ✅
Mode: Direct BYOK (COPILOT_PROVIDER_API_KEY via api-proxy sidecar)
|
🔍 Smoke Test: Copilot PAT Auth — Results
Overall: PARTIAL — MCP confirmed working; pre-computed step outputs were not injected (template vars unexpanded). Auth mode: PAT (COPILOT_GITHUB_TOKEN)
|
🔥 Smoke Test: Copilot Network Isolation
Overall: PASS
Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
network:
allowed:
- defaults
- "example.com"See Network Configuration for more information.
|
Smoke Test: Claude Engine Validation
Overall result: PASS ✅
|
🔬 Smoke Test Results
Overall: PARTIAL — MCP connectivity confirmed; pre-step outputs were not injected (template variables unresolved in prompt). cc
|
Smoke Test Results
Overall status: FAIL Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
network:
allowed:
- defaults
- "localhost"See Network Configuration for more information.
|
🔍 Smoke Test: API Proxy OpenTelemetry Tracing
Summary: All 5 scenarios pass. The OTEL integration is fully functional — module loads, 59 tests pass, env vars are forwarded,
|
Smoke Test Results — Services Connectivity
Overall: FAIL —
|
Chroot Version Comparison Results
Result: FAILED — Node.js version mismatch (host: v24.18.0, chroot: v22.23.1).
|
🏗️ Build Test Suite Results
Overall: 8/8 ecosystems passed — ✅ PASS
|
🔬 Smoke Test: Docker Sbx Validation
Overall Status:
|
|
Smoke test results:
|
Enterprise artifact scans flag the
v0.27.38images for vulnerable/outdated packages: Ubuntu'sgh2.4.0 (Go 1.18), npm 10.9.8 bundled with Node 22 (carrying vulnerabletar,brace-expansion,sigstore,picomatch), and Alpinecurl8.20.x.containers/agent/DockerfileghfromPKGS; add the official GitHub CLI apt repo and installgh=2.96.0nodejs=22.23.1-1nodesource1(was unversionedapt-get install -y nodejs)73f6155…), purge both npm 10.x trees (/usr/lib/node_modules/npm,/usr/local/lib/node_modules/npm) and stale/usr/bin/{npm,npx}, then extract manually — avoids executingnodeunder QEMU arm64 where it segfaultsapt-mark hold gh nodejsbefore the laterapt-get upgradeso the exact versions survive the security-patch upgrade stepcontainers/api-proxy/Dockerfilenode:22-alpine→node:22.23.1-alpine3.24apk add --no-cache "curl>=8.21.0-r0"(fixes CVE in Alpine curl 8.20.x)npm install --global npm@11.18.0with build-time assertions on bothnode --versionandnpm --version.github/workflows/release.ymlpull: trueto the API proxydocker/build-push-actionstep so release builds always pull a fresh base image while retaining the GHA layer cache