修复Node:22-alpine3.19镜像CVE-2023-42366漏洞咨询
问题详情
- 基础镜像:
node:22-alpine3.19 - 检测到存在CVE-2023-42366漏洞的包:
3.19:ssl_client 1.36.1-r15,需升级至1.36.1-r253.19:busybox 1.36.1-r15,需升级至1.36.1-r253.19:busybox-binsh 1.36.1-r15,需升级至1.36.1-r25
- 已知该漏洞已在
alpine3.19.1版本中修复,但在Dockerfile的构建阶段和生产阶段执行apk update/upgrade后,生成的镜像仍存在该漏洞,需解决漏洞修补或升级至alpine3.19.1的问题。
当前使用的Dockerfile内容:
FROM node:${RUNTIME_VERSION}-alpine${DISTRO_VERSION} AS builder ARG FUNCTION_DIR WORKDIR ${FUNCTION_DIR} RUN apk add --no-cache \ libstdc++ \ libcurl \ python3 RUN apk update #Tried update/upgrade in build stage RUN apk upgrade --no-cache <Install my dependencies> # Production Stage FROM node:${RUNTIME_VERSION}-alpine${DISTRO_VERSION} RUN apk update #Tried update/upgrade in production stage RUN apk upgrade --no-cache ARG FUNCTION_DIR WORKDIR ${FUNCTION_DIR} COPY --from=builder ${FUNCTION_DIR}/node_modules ${FUNCTION_DIR}/node_modules
解决方案
方法1:直接使用alpine3.19.1版本的Node镜像
这是最直接的解决方案,官方Node镜像已提供基于alpine3.19.1的版本,该版本内置了修复CVE-2023-42366漏洞的包。
修改方式:
- 构建时通过参数传递:
--build-arg DISTRO_VERSION=3.19.1 - 或者直接写死镜像标签:
FROM node:22-alpine3.19.1
修改后的Dockerfile示例:
FROM node:${RUNTIME_VERSION}-alpine3.19.1 AS builder ARG FUNCTION_DIR WORKDIR ${FUNCTION_DIR} RUN apk add --no-cache \ libstdc++ \ libcurl \ python3 <Install my dependencies> # Production Stage FROM node:${RUNTIME_VERSION}-alpine3.19.1 ARG FUNCTION_DIR WORKDIR ${FUNCTION_DIR} COPY --from=builder ${FUNCTION_DIR}/node_modules ${FUNCTION_DIR}/node_modules
方法2:强制升级指定漏洞包
如果无法直接切换镜像版本,可在apk upgrade时明确指定需要升级的三个包,确保它们被更新到修复版本。
将原有的apk upgrade --no-cache替换为:
RUN apk update && apk upgrade --no-cache busybox ssl_client busybox-binsh
修改后的生产阶段示例:
# Production Stage FROM node:${RUNTIME_VERSION}-alpine${DISTRO_VERSION} RUN apk update && apk upgrade --no-cache busybox ssl_client busybox-binsh ARG FUNCTION_DIR WORKDIR ${FUNCTION_DIR} COPY --from=builder ${FUNCTION_DIR}/node_modules ${FUNCTION_DIR}/node_modules
说明
ssl_client和busybox-binsh属于busybox的子组件,升级busybox通常会同步更新这两个包,但明确指定可避免apk依赖逻辑导致的未升级问题。
方法3:检查并更换Alpine镜像源
若使用的镜像源未同步最新包版本,会导致apk update后无法获取修复版本。可切换到Alpine官方源:
在执行apk update前添加源配置命令:
RUN echo "https://dl-cdn.alpinelinux.org/alpine/v3.19/main" > /etc/apk/repositories && \ echo "https://dl-cdn.alpinelinux.org/alpine/v3.19/community" >> /etc/apk/repositories && \ apk update && apk upgrade --no-cache
内容的提问来源于stack exchange,提问作者user14013917
相关产品推荐
相关产品推荐

