三个服务镜像运行 Node 18.12/18.13 — 终止生命周期版本,已钉定到 2022 年补丁
你好,感谢你参与这个项目。由`三个服务 Dockerfile`构建的图像运行在一个不再接收安全修复的基础上,我认为值得提醒一下。## 我观察到的情况 三个 Dockerfile 的**最终**阶段是 Node 18,每个都有自己的 `CMD`:| Dockerfile | final base | - | - | | `packages/amplication-plugin-api/Dockerfile` | `node:18.13.0-slim AS production` | | `packages/amplication-build-manager/Dockerfile` | `node:18.12.1-alpine` | | `ee/packages/git-sync-manager/Dockerfile` | `node:18.12.1-alpine` | `amplication-plugin-api` 这个 Dockerfile 明确指出了这一点: 1: FROM node:18.13.0-slim AS production 36: EXPOSE ${PORT} 39: CMD [ "node", "./main.js" ] `final stage` 的基础就是构建的图像,所以这就是发布的内容 - 不是一个被丢弃的构建阶段。我特别检查了这一点;今天查看的其他几个候选中,有一些只在 `build` 阶段中使用了一个旧基础,而最终的图像是 nginx 或 distroless,我将它们置于一旁。 **`node:18.12.1 / node:18.13.0` 位于 2025 年 4 月 30 日到期的线上。**这里实际上有两个问题。第一个问题是 **线上**已经到期。但 **pin 也非常精确且老旧**:`18.12.1` 是 2022 年 11 月,`18.13.0` 是 2023 年 1 月,而最终的 Node 18 版本是 `18.20.8`。按照设计,精确标签无法获取安全修复的补丁级别,因此这些图像在该线路到期前的两年多时间里落后了大约二十四个补丁级别。使用浮动小版本(`node:22`)而不是精确补丁级别将防止它们独立地半步。## 到期意味着什么 Node.js 在自己的安全发布说明中阐明了后果:>"重要的是要注意,**到期版本总是受影响**当发生安全发布时。" 2026 年 6 月版本修复了 22.x、24.x 和 26.x 中的 **十二个 CVEs**,而旧版本被排除在外:| CVE | 严重程度 | - | - | | CVE-2026-48933 | **高** | WebCrypto AES 整数溢出 → 远程进程退出(DoS) | | CVE-2026-48618 | **高** | Unicode 点分隔符 → TLS 通配符深度身份验证绕过 | | CVE-2026-48934 | 中等 | TLS 主机身份验证绕过通过会话重用 | | CVE-2026-48928 | 中等 | 大写 SNI 匹配 → mTLS 授权绕过 | | CVE-2026-48615 | 中等 | `ERR_PROXY_TUNNEL` 错误消息中泄露代理凭据 | 2026 年 7 月版本,本周发布,再次仅修复了 26.x/24.x/22.x,其中 *"该版本中修复的最高严重性问题为高"*。## 为什么没有人会告诉你标签继续解析得非常好 - 它只是不再被修复,没有人宣布这一点。Dependabot 的 `Docker` 生态系统文档中表明支持 *版本* 更新,但 **不支持安全更新**,因此基础到期后不会产生任何警告。## 我没有检查的事情 - 我没有拉取或扫描发布的图像;这是对构建它的 Dockerfile 的分析。 - 我没有确定哪些 CVEs 是…
内容来源: amplication/amplication