Si vous ne pouvez pas mettre à jour aujourd’hui

Atténuations temporaires

Ces mesures réduisent l’exposition à certains chemins d’attaque connus pendant que vous déployez la mise à jour. Aucune n’est complète, et certaines ont un vrai coût. Testez avant de déployer.

Dernière vérification 2026-10-22

Il n’existe pas de correction complète par configuration

Les deux avis de PHP le disent explicitement. Servez-vous-en pour gagner des heures ou des jours, pas des semaines. Guide de mise à jour →

Ce que fait chaque mesure

MesureEffetCVECoût / effets secondaires

memory_limit = -1 (défini côté administration) + plafond mémoire cgroup

Principale
La principale atténuation de configuration de l’avis. Supprime l’interruption OOM propre à PHP, sur laquelle reposent la plupart des chemins d’attaque.Les deuxC’est alors l’OS qui tue les workers incontrôlés, ce qui interrompt des requêtes. Sans plafond cgroup, une seule requête peut épuiser l’hôte.

session.upload_progress.enabled = 0

Partielle
Bloque les chemins de session confirmés, « mais pas les autres variantes » (php.net). À définir dans php.ini, le pool FPM ou la configuration serveur — pas dans .user.ini ni via ini_set().…619Casse les barres de progression d’envoi qui en dépendent (rare). À laisser désactivé après correction si inutilisé.

fatal_error_backtraces = 0 (PHP 8.5)

Partielle
Bloque uniquement le chemin confirmé via les backtraces d’erreur fatale — le cas démontré le plus solide de CVE-2026-109619.…619Les erreurs fatales n’incluent plus de backtrace.

Abaisser post_max_size + limite de taille côté frontal

Partielle
Moins de pression mémoire pilotée par l’attaquant pendant l’analyse multipart, avant que votre application ne s’exécute. php.net recommande 8M sans envoi de fichiers, 32M avec.…618Limite aussi les envois — testez les parcours d’envoi légitimes.

Borner les entrées : max_input_nesting_level, max_input_vars, max_file_uploads, max_multipart_body_parts

Partielle
Limite les autres croissances mémoire dues au parseur.…618Les formulaires volumineux ou très imbriqués peuvent échouer.

Supprimer les erreurs fatales déclenchables par un attaquant et les réglages invalides/obsolètes appliqués par requête

Partielle
Supprime les sources de l’état résiduel derrière CVE-2026-109619 : diagnostics émis avant l’initialisation, erreurs fatales et délais dépassés dans les callbacks, envois, imports et nettoyages.…619Effort de revue du code et de la configuration.

Abaisser pm.max_requests (FPM)

Partielle
Recycle les workers pour qu’un état corrompu survive à moins de requêtes. 1 est la valeur extrême évoquée par l’avis.…619Coût réel en CPU et en latence ; inutile contre les attaques en une seule requête.

display_errors = 0

Limite l’impact
Empêche l’affichage d’erreurs de divulguer des détails aux visiteurs. Attention : masquer les diagnostics n’arrête pas le déclencheur de CVE-2026-109619.ImpactAucun en production.

Confinement SELinux / AppArmor du worker PHP

Limite l’impact
Limite ce que le code injecté peut exécuter ou lire.ImpactTravail sur les politiques ; n’empêche pas la divulgation de mémoire.

Règles gérées WAF / CDN

Partielle
Bloque les formes de charges connues en bordure. Cloudflare couvre aussi les offres Free.Les deuxLes attaquants modifient déjà les charges ; la couverture varie selon le fournisseur.

À ne pas faire

Ne remplacez pas memory_limit par RLIMIT_AS / RLIMIT_DATA

C’est-à-dire ulimit -v / ulimit -d, LimitAS= / LimitDATA= de systemd ou les astuces rlimit_*. Elles font échouer mmap() dans PHP, ce qui déclenche le même chemin OOM vulnérable. Utilisez plutôt une limite cgroup (MemoryMax=, --memory côté conteneur).

Configuration à copier-coller

fichier php.ini additionnel
; /etc/php/8.3/fpm/conf.d/99-php2shell.ini  (path varies)
; TEMPORARY PHP2Shell mitigations — revisit after upgrading.
; Tune every number to what your application really needs.

session.upload_progress.enabled = 0
fatal_error_backtraces = 0      ; PHP 8.5 only, ignored elsewhere
display_errors = 0

post_max_size = 8M              ; php.net: 8M without uploads, 32M with
upload_max_filesize = 6M        ; keep below post_max_size
max_input_nesting_level = 32    ; default 64
max_input_vars = 1000
max_file_uploads = 5            ; default 20
max_multipart_body_parts = 200
pool php-fpm
; /etc/php/8.3/fpm/pool.d/www.conf  (one block per pool)
; php_admin_* cannot be overridden by ini_set() in application code.
; WordPress and others call ini_set('memory_limit', ...) — a plain
; php.ini value would be silently replaced with a finite limit again.
php_admin_value[memory_limit] = -1
php_admin_flag[session.upload_progress.enabled] = off

; Recycle workers more often (performance cost — measure it)
pm.max_requests = 50
apache / nginx
# Apache + mod_php (VirtualHost or global config)
php_admin_value memory_limit -1
php_admin_flag session.upload_progress.enabled off
# 32 MiB request body cap (match post_max_size)
LimitRequestBody 33554432

# nginx in front of PHP-FPM
client_max_body_size 32m;
plafond mémoire cgroup
# Cap total PHP-FPM memory with cgroup v2 (systemd's MemoryMax = memory.max)
sudo systemctl edit php8.3-fpm
#   [Service]
#   MemoryHigh=3G
#   MemoryMax=4G
sudo systemctl restart php8.3-fpm
systemctl show php8.3-fpm -p MemoryMax

# Containers: set a memory limit on the container instead
docker run --memory=4g ...

Redémarrez PHP-FPM / Apache après chaque modification. Vérifiez la valeur effective avec php-fpm8.3 -i | grep -E 'memory_limit|upload_progress' — en gardant à l’esprit que -i lit php.ini mais pas les surcharges de pool ; vérifiez donc aussi phpinfo() depuis le site.

Après la mise à jour

  • Remettez memory_limit à une valeur finie adaptée à votre application. Le PHP corrigé ajoute une limite stricte au-dessus.
  • Gardez post_max_size nettement sous le budget mémoire, et max_input_nesting_level à ce dont vous avez réellement besoin.
  • Laissez session.upload_progress.enabled = 0 si vous ne l’utilisez pas. Moins de surface d’attaque, aucun coût.
  • Remettez pm.max_requests à sa valeur habituelle.
  • Facultatif : expose_php = 0 masque votre version aux scanners. C’est de l’hygiène, pas une correction.