如何修复Next.js应用node:alpine镜像的CVE-2023-42364漏洞
修复Next.js Docker镜像中busybox的Use After Free漏洞问题
问题背景
我有一个Next.js应用的Dockerfile如下:
FROM node:alpine AS base # 2) Install dependencies only when needed. FROM base AS deps # 3) Install packages with no cache RUN apk add --no-cache libc6-compat # 4) Install dependencies based on the preferred package manager WORKDIR /app COPY package.json ./ RUN npm update && npm install # 5) Rebuild the source code only when needed FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . # 6) Build the code RUN npm run build # 7) Production image, copy all the files and run next FROM base AS runner WORKDIR /app ENV NODE_ENV production RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs COPY --from=builder /app/public ./public # 8) Set the correct permission for prerender cache. RUN mkdir .next RUN chown nextjs:nodejs .next # 9) Reduce the Image size COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static # 10) Expose the port USER nextjs EXPOSE 3000 ENV PORT 3000 # 11) server.js is created by next build from the standalone output CMD ["node", "server.js"]
Snyk检测到以下漏洞:
- busybox/busybox Use After Free
- 中等风险漏洞
- 修复建议:将Alpine:3.20的busybox升级至1.36.1-r29或更高版本
我的Dockerfile使用的是未指定版本的最新node:alpine镜像,请问该如何修复此漏洞?
修复方案
方案1:指定带修复版busybox的Node Alpine镜像版本
node:alpine镜像的不同标签对应不同的Alpine基础版本,直接选择官方已集成修复后busybox的Node镜像即可。比如选择基于Alpine 3.20且busybox符合版本要求的Node 20镜像,修改Dockerfile第一行:
FROM node:20-alpine3.20 AS base
这种方式最直接,依赖官方维护的镜像,无需手动处理依赖升级。
方案2:手动升级busybox
如果不想更换Node镜像版本,可在base阶段手动升级busybox,确保后续所有阶段都使用修复后的版本:
修改base阶段的代码,添加升级命令:
FROM node:alpine AS base RUN apk update && apk upgrade busybox --no-cache
这条命令会把镜像中的busybox升级到当前Alpine仓库的最新可用版本,满足漏洞修复的版本要求。
内容的提问来源于stack exchange,提问作者Europa
相关产品推荐
相关产品推荐

