CVE-2026-109619 : état global obsolète (PHP2Shell)CVE-2026-109618 : PHP2ShellCVE-2026-86869 : faille « zéro clic » via iMessage dans iOS, iPadOS et macOS
Vulnérabilité

CVE-2026-109619 : état global obsolète (PHP2Shell)

Faible

Description

Résumé

Identifiant CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp)
Surnom PHP2Shell
Produit PHP (moteur / runtime)
Type Use-after-free entre requêtes (état global obsolète)
Score CVSS v4.0 9,2 (Critique)
Authentification requise Non
Impact Exécution de code à distance
Exploitation Preuves de concept publiques, tentatives de scan observées
Découverte Calif, Wiz Research et OpenAI
Correctif 21 octobre 2026

Description

Sur un serveur, un même processus PHP (worker) traite souvent plusieurs requêtes à la suite. Normalement, tout ce qui concerne une requête est remis à zéro avant la suivante.

Avec cette faille, quand une requête se termine par une erreur fatale, certaines données internes continuent de pointer vers une zone mémoire déjà libérée. La requête suivante, traitée par le même worker, peut alors utiliser ces données périmées avant leur réinitialisation.

Un attaquant peut exploiter ce comportement pour exécuter du code. Les chemins d’attaque démontrés passent notamment par le mécanisme de suivi d’envoi de fichiers des sessions (session.upload_progress), qui ne nécessite même pas d’appel à session_start(), et par les traces d’erreurs fatales sur PHP 8.5.

Masquer les erreurs (avec error_reporting, display_errors ou @) ne protège pas.

Versions concernées

  • PHP 8.5 avant 8.5.12
  • PHP 8.4 avant 8.4.27
  • PHP 8.3 avant 8.3.36
  • PHP 8.2 avant 8.2.35
  • PHP 8.1 et versions plus anciennes (jusqu’à 5.4), sans mise à jour officielle

Configurations exposées : PHP-FPM, Apache avec mod_php, php-cgi, FrankenPHP, LiteSpeed. L’exposition dépend aussi de la configuration PHP.

Versions corrigées

  • PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35
  • Correctifs source publiés pour PHP 7.4, 8.0 et 8.1

Recommandations

  • Mettre à jour immédiatement puis redémarrer tous les workers PHP.
  • Vérifier les images Docker, les pipelines de déploiement et les environnements serverless.
  • Si la mise à jour est impossible : isoler le serveur d’Internet.

Mesures temporaires (ne remplacent pas la mise à jour)

  • Définir session.upload_progress.enabled=0 dans php.ini ou la configuration du pool FPM, puis redémarrer. Ne pas compter sur ini_set() ou .user.ini.
  • Sur PHP 8.5 : définir fatal_error_backtraces=0 et redémarrer.
  • Supprimer les réglages invalides ou obsolètes qui génèrent des avertissements au démarrage des requêtes.
  • Corriger les erreurs fatales et dépassements de temps qu’un attaquant peut provoquer (envois de fichiers, imports, callbacks).

Faille liée

Exploitée avec CVE-2026-109618 dans l’outil PHP2Shell.

Références