Skip to content

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

Description

@kobihikri

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions