bug: Docker images ship Node.js 24 without the October 2026 security release (needs >= 24.22.1)

这个报错通常出现在自托管 Langfuse Web 或 Worker 容器的安全检查场景:镜像内置的 Node.js 版本低于 24.22.1,因此缺少 2026 年 10 月 Node.js 安全更新。应优先确认正在运行的镜像里实际包含的 Node.js 版本,以及底层系统的 CA 证书包是否仍信

快速结论:这个报错通常出现在自托管 Langfuse Web 或 Worker 容器的安全检查场景:镜像内置的 Node.js 版本低于 24.22.1,因此缺少 2026 年 10 月 Node.js 安全更新。应优先确认正在运行的镜像里实际包含的 Node.js 版本,以及底层系统的 CA 证书包是否仍信任已受影响的证书层级。

适用环境:Langfuse 自托管部署(Docker 镜像、Kubernetes/Helm);涉及镜像 langfuse/langfuse 与 langfuse/langfuse-worker;Issue 验证过的镜像标签包括 v4.67.0、v4.68.0、v4.69.0(UBI 9.8 基础镜像)以及 v3 的 3.224.1、3.225.11;检查平台为 linux/amd64;社区还提到 Alpine 变体。未确认 Python、CUDA、PyTorch 或显卡相关环境。

最快修复方案:暂无确认的一步修复方案。Issue 中节点版本问题最终随维护者的镜像更新关闭,但评论里未给出可复现的单步修复命令;对 CA 信任问题,评论提到唯一有效变通是挂载较新的 CA 证书包(bind-mount),细节记录在关联 Issue #19233 中。

注意事项:仅升级 Node.js 不能完全解决证书信任问题,因为镜像的操作系统 CA 包本身仍包含受影响的 emSign ECC Root CA - G3;设置 NODE_OPTIONS=--use-openssl-ca 只是切换回仍受影响的系统证书库,不能消除风险。Red Hat 对 CVE-2026-111497 的评估曾出现记录冲突,Issue 中未能确认 nodejs-24.21.0 RPM 是否包含后移植的 Brotli 修复。

问题场景

用户以自托管方式(Kubernetes + Helm chart)运行 Langfuse 的 Web 和 Worker 容器,做供应链安全检查时发现镜像内的 Node.js 版本为 v24.21.0,低于 2026 年 10 月安全更新要求的 v24.22.1。Worker 会发起出站 HTTP(S) 请求(例如 LLM-as-a-judge 评估、Webhook),因此 Brotli 解码器越界写与 TLS 证书校验绕过等问题被认为与自托管部署相关。后续评论进一步指出,v3 系列镜像(3.224.1 = Node 24.18.0,3.225.11 = Node 24.21.0)同样受影响。

报错原文

bug: Docker images ship Node.js 24 without the October 2026 security release (needs >= 24.22.1)

复现时实际输出:

$ docker run --rm --entrypoint node langfuse/langfuse:4.67.0 --version
v24.21.0
$ docker run --rm --entrypoint node langfuse/langfuse-worker:4.67.0 --version
v24.21.0
# Expected: v24.22.1 or later

原因分析

最可能的原因:Langfuse 镜像从 RHEL nodejs:24 module stream 安装 Node.js,且未固定具体版本。在 Issue 记录的时间点(2026-10-23),UBI 9 AppStream 仓库中尚无 nodejs 24.22.1,因此重新构建镜像也不会自动带上修复。评论还确认,镜像中 process.versions.brotli 为 1.2.0、node_shared_brotli=false,说明 Node 使用的是自身构建内嵌的 Brotli 解码器,而不是单独的系统 Brotli 库,这正是 Node.js 安全公告描述的风险路径。

另外,评论指出镜像的 OS CA 证书包(Alpine 变体为 /etc/ssl/certs/ca-certificates.crt,from ca-certificates-bundle-20260909-r0;UBI 变体为 /etc/pki/tls/certs/ca-bundle.crt)仍信任受影响的 eMudhra/emSign 证书层级,这部分无法通过单纯升级 Node 解决。

环境排查

  • 确认实际运行镜像的标签与 digest(langfuse/langfuse 与 langfuse/langfuse-worker)。
  • 在容器内查看 Node.js 版本:node --version,预期 >= 24.22.1。
  • 检查 Brotli 运行时信息:process.versions.brotli 与 process.config.variables.node_shared_brotli。
  • 检查基础镜像类型:UBI 9(/etc/pki/tls/certs/ca-bundle.crt)还是 Alpine(/etc/ssl/certs/ca-certificates.crt)。
  • 检查系统 CA 包版本与证书数量,确认是否仍包含 emSign ECC Root CA - G3。
  • 若使用 v3 系列,核对镜像是否为 3.225.11 或更早版本(Node 24.21.0 / 24.18.0)。

解决步骤

  1. 先用 docker run --rm --entrypoint node <镜像> --version 核对当前镜像的 Node.js 版本,确认是否低于 24.22.1。
  2. 关注 Langfuse 官方发布的新镜像 digest,并在升级后重复上述检查,确认 Node.js 达到 24.22.1 或更高。
  3. 在镜像未更新前,评估出站请求路径的风险;评论中提到可优先尝试的变通方案是绑定挂载一份较新的 CA 证书包(bind-mount 当前 bundle),具体挂载方式与覆盖矩阵见关联 Issue #19233。
  4. 不要仅依赖 NODE_OPTIONS=--use-openssl-ca 作为修复手段——评论已验证它仍会选中包含受影响证书的系统信任库。
  5. v3 自托管用户可关注 v3 补丁发布(v3 安全补丁承诺至 2027 年 1 月底),并同样核对镜像内 Node.js 版本。
  6. 若需要判断具体 RPM 是否已包含 Brotli 修复,可对照 Red Hat CVE 页面与安全数据 JSON 的评估结果;Issue 中该两项曾出现冲突记录,需以官方后续更正为准。

验证方法

升级镜像后重新执行 docker run --rm --entrypoint node <镜像> --version,确认输出为 v24.22.1 或更高;同时检查 process.versions.brotli 与系统 CA 包中是否已移除受影响的 eMudhra/emSign 证书。对于 CA 绑定挂载的变通方案,可通过对比挂载前后的证书列表与指纹,确认受影响的根证书不再被信任。

参考来源

langfuse/langfuse #19177

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 30036

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注