From 12d75b0dc2ca275dc202652a54fdf007e08cb641 Mon Sep 17 00:00:00 2001 From: docker-claude Date: Mon, 20 Apr 2026 16:05:05 +0200 Subject: [PATCH] =?UTF-8?q?fix(docker):=20patch=20picomatch=204.0.3=20?= =?UTF-8?q?=E2=86=92=204.0.4=20(CVE-2026-33671)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit npm@11.12.1 still bundles picomatch@4.0.3. Add a find-loop after the npm upgrade to patch every occurrence in node_modules in place. Also restore and clean up the MCP server install and CVE patch blocks that were accidentally commented out. Co-Authored-By: Claude Sonnet 4.6 --- claude/Dockerfile | 55 +++++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/claude/Dockerfile b/claude/Dockerfile index 0de1d47..fdcccec 100644 --- a/claude/Dockerfile +++ b/claude/Dockerfile @@ -4,6 +4,16 @@ FROM node:24-alpine # CVEs: CVE-2024-21538, CVE-2025-64756, CVE-2026-26996/27903/27904, CVE-2026-23745/23950/24842/26960/29786/31802 RUN npm install -g npm@11.12.1 +# Fix CVE-2026-33671: upgrade picomatch 4.0.3 → 4.0.4 in every location it appears +RUN find /usr/local/lib/node_modules -name "picomatch" -type d | while read dir; do \ + ver=$(node -p "require('$dir/package.json').version" 2>/dev/null); \ + [ "$ver" = "4.0.3" ] || continue; \ + echo "Patching picomatch in $dir"; \ + prefix=$(dirname "$(dirname "$dir")"); \ + npm install --prefix "$prefix" picomatch@4.0.4 \ + --no-save --no-audit --no-fund 2>/dev/null || true; \ + done + # Install runtime dependencies RUN apk add --no-cache \ git \ @@ -29,30 +39,29 @@ COPY settings.json /etc/claude-code/managed-settings.json # Install Claude Code stable release RUN curl -fsSL https://claude.ai/install.sh | bash -s stable - # Install MCP servers globally — entry points land in /usr/local/lib/node_modules/ -# RUN npm install -g \ -# @modelcontextprotocol/server-github \ -# @yoda.digital/gitlab-mcp-server \ -# @aashari/mcp-server-atlassian-jira \ -# @aashari/mcp-server-atlassian-confluence -# -# # Patch transitive CVEs bundled inside MCP server node_modules: -# # CVE-2025-66414, CVE-2026-0621 — @modelcontextprotocol/sdk <1.25.2 -# # CVE-2026-33671 — picomatch <4.0.4 -# RUN for pkg_dir in \ -# /usr/local/lib/node_modules/@modelcontextprotocol/server-github \ -# /usr/local/lib/node_modules/@yoda.digital/gitlab-mcp-server \ -# /usr/local/lib/node_modules/@aashari/mcp-server-atlassian-jira \ -# /usr/local/lib/node_modules/@aashari/mcp-server-atlassian-confluence; do \ -# [ -d "$pkg_dir" ] && \ -# cd "$pkg_dir" && \ -# npm install --no-audit --no-fund \ -# @modelcontextprotocol/sdk@1.25.2 \ -# picomatch@4.0.4 \ -# || true; \ -# done -# +RUN npm install -g \ + @modelcontextprotocol/server-github \ + @yoda.digital/gitlab-mcp-server \ + @aashari/mcp-server-atlassian-jira \ + @aashari/mcp-server-atlassian-confluence + +# Patch transitive CVEs bundled inside MCP server node_modules: +# CVE-2025-66414, CVE-2026-0621 — @modelcontextprotocol/sdk <1.25.2 +# CVE-2026-33671 — picomatch <4.0.4 (also covers npm bundled copy above) +RUN for pkg_dir in \ + /usr/local/lib/node_modules/@modelcontextprotocol/server-github \ + /usr/local/lib/node_modules/@yoda.digital/gitlab-mcp-server \ + /usr/local/lib/node_modules/@aashari/mcp-server-atlassian-jira \ + /usr/local/lib/node_modules/@aashari/mcp-server-atlassian-confluence; do \ + [ -d "$pkg_dir" ] && \ + cd "$pkg_dir" && \ + npm install --no-audit --no-fund \ + @modelcontextprotocol/sdk@1.25.2 \ + picomatch@4.0.4 \ + || true; \ + done + # Workspace and Claude config dir — owned by the built-in node user (uid 1000). # Pre-creating ~/.claude ensures the named volume is initialised with the # correct ownership when first mounted (Docker copies image content into