fix(security): Node 22.23.4 base image, Next.js 15.5.28 and sharp 0.35.5
Closes #473.
The published self-hosted image (v1.9.8/latest) and a rebuild of current main are both still exposed to the October 2026 Node.js and Next.js security releases. This PR fixes the three gaps described in #473.
Changes
| Before | After | Why | |
|---|---|---|---|
docker/Dockerfile base | node:22-alpine3.20 (Node 22.16.0, tag no longer updated) | node:22-alpine3.23 (Node 22.23.4) | CVE-2026-111497 (Brotli decoder RCE) and the rest of the 21 Oct 2026 Node.js release are fixed in 22.23.4. #472 raises engines/CI but not the image, so the image would have stayed on 22.16.0. |
next (apps/web, apps/marketing) | 15.5.27 | 15.5.28 | 14 Oct 2026 Next.js release: image optimization RCE with SVG (GHSA-2464-fhr4-w9xw), Server Actions DoS (GHSA-p3m5-59mp-jv5r). 15.5.28 is now 10 days old, past the min-release-age window. |
sharp | 0.34.5 | 0.35.5 (override) | next@15.5.28 accepts ^0.34.3 || ^0.35.5, so the lockfile otherwise keeps 0.34.5. 0.35.5 is the version the image-optimization advisory names. The override is scoped to >=0.34.0 <0.35.5 and added in both pnpm-workspace.yaml and package.json, following the existing sync comment. |
pnpm-lock.yaml was regenerated with the pinned pnpm@11.11.0.
Verified
docker build -f docker/Dockerfile .succeeds.- In the built image:
node -v→v22.23.4,next15.5.28,sharp0.35.5. - sharp's native binary loads and renders a PNG on Alpine 3.23 (libvips 8.18.7).
- I did not run the full app (the entrypoint runs Prisma migrations and needs a database), so a quick check against a real deployment is still worth doing.
Once merged, cutting a release would get these fixes to self-hosters, who are still on Next.js 15.5.18 and Node 22.16.0 in v1.9.8.
🤖 Generated with Claude Code
Summary by cubic
Closes #473 by patching the three October 2026 security gaps in the self-hosted image: Node.js, Next.js, and sharp.
- Docker base:
node:22-alpine3.20(Node 22.16.0, a tag that stopped updating) →node:22-alpine3.23(Node 22.23.4). Fixes CVE-2026-111497 (Brotli decoder RCE) and the rest of the 21 Oct 2026 Node.js release. - Next.js 15.5.27 → 15.5.28 in
apps/webandapps/marketing. Fixes the 14 Oct 2026 release: image optimization RCE with SVG (GHSA-2464-fhr4-w9xw) and Server Actions DoS (GHSA-p3m5-59mp-jv5r). sharp0.34.5 → 0.35.5 via a pnpm override scoped to>=0.34.0 <0.35.5, added inpnpm-workspace.yamlandpackage.json. Without it, next 15.5.28's range (^0.34.3 || ^0.35.5) keeps the lockfile on 0.34.5, below the version the advisory names.
The image builds and verified node v22.23.4, next 15.5.28, sharp 0.35.5 (native binary loads and renders a PNG on Alpine 3.23). The full app wasn't run since the entrypoint needs a database for Prisma migrations. Cutting a release after merge would get these fixes to self-hosters on v1.9.8 (Next.js 15.5.18, Node 22.16.0).
Summary by CodeRabbit
- Chores
- Updated the framework used by the marketing site and web app.
- Updated the application’s container base image.
- Updated image-processing package version constraints across the workspace. These maintenance updates may improve compatibility and reliability; no user-facing features or behavior changes are noted.