#6864·NextChat

Published Docker image is built on node:18-alpine, end-of-life since 2025-04-30

Author: kobihikriCreated Jul 29, 2026Updated Aug 18, 2026

Hello, and thank you for NextChat.

The published Docker image is built on a Node line that stopped receiving security fixes fifteen months ago, and I think it's worth a look.

What I observed

Dockerfile builds every stage from one base, including the one that becomes the image:

 1:  FROM node:18-alpine AS base
 3:  FROM base AS deps
14:  FROM base AS builder
28:  FROM base AS runner      <-- the shipped stage
47:  EXPOSE 3000

So runner inherits node:18-alpine. This isn't a build-only base that gets discarded — it's what ships, via .github/workflows/docker.yml.

Node 18 reached end-of-life on 2025-04-30. The supported lines today are 22, 24 and 26.

Why that matters more than a version number

Node.js states the consequence directly in its security-release notes:

"It's important to note that End-of-Life versions are always affected when a security release occurs."

The June 2026 release fixed twelve CVEs, patched into 22.x, 24.x and 26.x — and not into 18.x:

CVE Severity
CVE-2026-48933 HIGH WebCrypto AES integer overflow → remote process abort (DoS)
CVE-2026-48618 HIGH Unicode dot separator → TLS wildcard-depth authentication bypass
CVE-2026-48934 Medium TLS host identity verification bypass via session reuse
CVE-2026-48928 Medium Uppercase SNI matching → mTLS authorization bypass
CVE-2026-48615 Medium Proxy credentials leaked in ERR_PROXY_TUNNEL error message

The July 2026 release, published this week, again patched only 26.x/24.x/22.x, with "the highest severity issue fixed in this release is HIGH." That's one release out of fifteen months of them.

Why nothing would have told you

node:18-alpine keeps resolving perfectly well — it just stops being fixed, silently. Dependabot's docker ecosystem is documented as doing version updates but not security updates, so a base image going end-of-life raises no alert at all.

What I did NOT check

  • I did not pull or scan the published image; this is an analysis of the Dockerfile that builds it.
  • I did not determine which of those CVEs are reachable in NextChat's usage, and I'm not claiming any of them is exploitable here. The narrower claim is that an end-of-life runtime ships and structurally cannot receive these fixes.
  • I did not assess Alpine's own package set separately.

Suggestion

Moving the base to node:22-alpine or node:24-alpine would put it back on a patched line. I'm happy to open the PR if that's useful — it's a one-line change plus a build/test pass for the major bump.

Disclosure: AI-assisted (Claude Opus 5). I verified the Dockerfile stages, the Node EOL dates from endoflife.date, and the CVE list from nodejs.org myself before posting.