Skip to content

v1.2.6 release notes

Release Date: 2025-12-14 Type: Container Optimization Release

This release optimizes the web application Dockerfile by switching to the smaller nginx:1.29-alpine-slim base image and fixes non-root permission issues specific to the alpine-slim variant. The alpine-slim image provides a reduced attack surface with minimal packages while maintaining full functionality for serving the CyberChef web application.

The web application Dockerfile now uses nginx:1.29-alpine-slim instead of nginx:stable-alpine:

# Before (v1.2.5)
FROM nginx:stable-alpine AS cyberchef
# After (v1.2.6)
FROM nginx:1.29-alpine-slim AS cyberchef

Benefits:

  • Smaller image size: alpine-slim variant includes only essential packages
  • Reduced attack surface: Fewer packages means fewer potential vulnerabilities
  • Explicit version pinning: 1.29 ensures reproducible builds (no surprise updates)
  • Security hardened: Minimal base image follows container security best practices

The alpine-slim variant has stricter default permissions than standard alpine, requiring explicit setup for non-root nginx execution:

# Security: Set proper ownership for nginx user and cache directories
# The alpine-slim variant requires explicit cache directory setup for non-root execution
RUN chown -R nginx:nginx /usr/share/nginx/html && \
chmod -R 755 /usr/share/nginx/html && \
mkdir -p /var/cache/nginx/client_temp \
/var/cache/nginx/proxy_temp \
/var/cache/nginx/fastcgi_temp \
/var/cache/nginx/uwsgi_temp \
/var/cache/nginx/scgi_temp && \
chown -R nginx:nginx /var/cache/nginx && \
chown -R nginx:nginx /var/run && \
chown -R nginx:nginx /run

Fixed Issues:

  1. nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (13: Permission denied)
  2. nginx: [emerg] open() "/run/nginx.pid" failed (13: Permission denied)

Root Cause: The nginx:alpine-slim variant does not pre-create nginx cache directories or configure permissions for non-root execution by default.

nginx requires the following cache directories for operation:

  • /var/cache/nginx/client_temp - Client body buffering
  • /var/cache/nginx/proxy_temp - Proxy response buffering
  • /var/cache/nginx/fastcgi_temp - FastCGI response buffering
  • /var/cache/nginx/uwsgi_temp - uWSGI response buffering
  • /var/cache/nginx/scgi_temp - SCGI response buffering

These directories must be created and owned by the nginx user for non-root execution.

nginx writes its process ID to /run/nginx.pid (symlinked from /var/run/nginx.pid on Alpine). The nginx user must have write access to /run for the PID file.

File Change
Dockerfile Changed base image from nginx:stable-alpine to nginx:1.29-alpine-slim
Dockerfile Added explicit mkdir for nginx cache directories
Dockerfile Added chown for /var/run and /run directories
package.json mcpVersion bumped to 1.2.6
src/node/mcp-server.mjs Version constant updated to 1.2.6
README.md Version references updated to v1.2.6
docs/user_guide.md Download URLs updated to v1.2.6
SECURITY.md Security measures section updated to v1.2.6
docs/planning/ROADMAP.md Added v1.2.6 to release overview
CHANGELOG.md v1.2.6 release notes added
Terminal window
# Pull latest MCP server image
docker pull ghcr.io/doublegate/cyberchef-mcp_v1:v1.2.6
# Or download offline tarball
wget https://github.com/doublegate/CyberChef-MCP/releases/download/v1.2.6/cyberchef-mcp-v1.2.6-docker-image.tar.gz
docker load < cyberchef-mcp-v1.2.6-docker-image.tar.gz

If using the web application Dockerfile:

Terminal window
docker build -t cyberchef-web .
docker run -p 8080:80 cyberchef-web
Terminal window
# Verify nginx user in web app container
docker run --rm cyberchef-web id
# Expected: uid=101(nginx) gid=101(nginx) groups=101(nginx)
# Verify MCP server non-root user
docker run --rm ghcr.io/doublegate/cyberchef-mcp_v1:v1.2.6 id
# Expected: uid=1001(cyberchef) gid=1001(cyberchef)

None. This release is fully backward compatible with v1.2.5.

Aspect nginx:alpine nginx:alpine-slim
Image Size ~40MB ~12MB
Packages Full Alpine base Minimal essential only
Attack Surface Standard Reduced
Shell /bin/sh included /bin/sh included
Package Manager apk included apk not included

The slim variant provides security through minimization - fewer packages means fewer potential vulnerabilities and less to patch.

For maximum security, run with all hardening options:

Terminal window
docker run -i --rm \
--read-only \
--tmpfs /tmp:size=100M \
--cap-drop=ALL \
--security-opt=no-new-privileges \
ghcr.io/doublegate/cyberchef-mcp_v1:v1.2.6

Full Changelog: v1.2.5…v1.2.6