PHP fissato alla 8.3.36 (CVE-2026-109618, CVE-2026-109619)

- Dockerfile: ARG PHP_VERSION=8.3.36 e FROM php:${PHP_VERSION}-fpm al posto
  del tag mobile php:8.3-fpm, che la cache di Docker poteva risolvere sulla
  8.3.35 vulnerabile. Una build ora prende la versione corretta o fallisce.
- phpredis da GitHub (versione fissata) invece di pecl.php.net, che il
  giorno della patch rispondeva 504 e bloccava la build.
- Test contro il ritorno a un tag mobile o a una versione vulnerabile.
- PHP_VERSION passabile dal compose solo per prove locali.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-21 11:05:13 +02:00
parent 5fb42b05c7
commit db5772d7f5
4 changed files with 114 additions and 3 deletions

View File

@@ -1,5 +1,21 @@
# syntax=docker/dockerfile:1
# Versione di PHP, fissata alla patch. Va dichiarata prima del primo FROM per
# poterla usare nel FROM dello stage `base`.
#
# Fissata e non "8.3": quel tag si sposta, ma Docker tiene in cache la base già
# scaricata, e una ricostruzione senza --pull (anche su Dokploy) poteva uscire
# con un PHP vecchio senza che nessuno se ne accorgesse. Con la patch scritta
# qui, una build o prende questa versione o fallisce.
#
# 8.3.36: corregge CVE-2026-109618 e CVE-2026-109619 (esecuzione di codice da
# remoto nel core di PHP, CVSS 9.2, rilascio del 21/10/2026). Non scendere
# sotto. Aggiornala a ogni rilascio di sicurezza del ramo 8.3.
#
# Solo per provare in locale prima che l'immagine corretta sia su Docker Hub:
# PHP_VERSION=8.3.35 docker compose ... (mai per un deploy).
ARG PHP_VERSION=8.3.36
# =============================================================================
# Stage 1 — PHP dependencies (no dev, production autoloader)
# =============================================================================
@@ -65,7 +81,7 @@ RUN npm run build
# estensioni e sullo stesso php.ini della produzione: un test che passa qui
# non puo' passare grazie a un ambiente diverso da quello vero.
# =============================================================================
FROM php:8.3-fpm AS base
FROM php:${PHP_VERSION}-fpm AS base
# nginx + supervisor run in-image alongside php-fpm: a separate nginx container
# would need its own copy of public/ plus the storage volume just to serve
@@ -76,6 +92,11 @@ FROM php:8.3-fpm AS base
# are named per Debian release (libicu72 vs libicu76, libzip4 vs libzip5), so
# purging means pinning package names that break whenever the php base image
# moves to a new Debian. A few tens of MB is worth not having that breakage.
#
# phpredis si scarica da GitHub, versione fissata, e non con `pecl install`:
# il 21/10/2026, giorno della patch di sicurezza di PHP, pecl.php.net
# rispondeva 504 e la build falliva proprio quando bisognava aggiornare.
ARG PHPREDIS_VERSION=6.3.0
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
netcat-openbsd \
@@ -101,8 +122,13 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
intl \
zip \
opcache \
&& pecl install redis \
&& docker-php-ext-enable redis \
&& mkdir -p /usr/src/php/ext/redis \
&& curl -fsSL --retry 5 --retry-delay 5 \
"https://github.com/phpredis/phpredis/archive/refs/tags/${PHPREDIS_VERSION}.tar.gz" \
| tar xz --strip-components=1 -C /usr/src/php/ext/redis \
&& echo redis >> /usr/src/php-available-exts \
&& docker-php-ext-install -j"$(nproc)" redis \
&& docker-php-source delete \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*