
Web & cybersécurité
Deux failles critiques touchent le moteur PHP lui-même. Voici leurs mécanismes, les versions vulnérables, les systèmes exposés et les étapes à suivre pour corriger et vérifier vos applications.
Le 21 octobre 2026, l’équipe de sécurité PHP a publié quatre versions correctives pour deux vulnérabilités critiques du moteur : CVE-2026-109618 et CVE-2026-109619, également désignées sous le nom de PHP2Shell. Elles peuvent, dans certaines configurations, permettre à un attaquant non authentifié d’exécuter du code sur un serveur web.
Le problème dépasse un CMS, un framework ou un hébergeur : c’est le moteur PHP côté serveur qui est concerné. Qu’il exécute WordPress, Drupal, PrestaShop, Laravel, Symfony ou une application développée sur mesure, un site utilisant une version vulnérable doit être évalué et corrigé. Le niveau d’exposition réel dépend ensuite de la configuration, des processus PHP et des accès réseau.
9,2/10 (CVSS v4.0) pour chacune des failles. Les versions PHP corrigées publiées le 21 octobre 2026 sont 8.2.35, 8.3.36, 8.4.27 et 8.5.12. Il n’existe pas de contournement complet : seule l’application d’un correctif adapté traite l’ensemble des chemins d’exploitation connus.
Le 20 octobre, l’équipe PHP annonçait une publication de sécurité urgente. Le 21 octobre, elle a livré les correctifs et rendu publics les détails techniques. Le CERT-FR et le CERT-EU recommandent une remédiation immédiate, voire l’isolement des services exposés à Internet lorsqu’aucun correctif ne peut être appliqué rapidement.
Les deux vulnérabilités appartiennent à la catégorie RCE (Remote Code Execution, ou exécution de code à distance). À la différence d’une erreur affectant une extension WordPress particulière ou une page d’application, elles se situent à l’intérieur du runtime PHP : celui-ci intervient dans le traitement des requêtes HTTP, des formulaires, de la mémoire et de l’état des processus.
« Sans authentification » ne signifie pas « compromis automatiquement ». L’attaque n’exige pas nécessairement de compte utilisateur, mais sa faisabilité varie selon le mode d’exécution et la configuration. La gravité réside dans le potentiel d’accès au système avant que les contrôles habituels de l’application aient pu jouer leur rôle.
Les défauts ont un point commun : des données internes sont utilisées alors que leur état mémoire n’est plus fiable. Ils exploitent toutefois deux mécanismes distincts.
Lorsqu’une limite de mémoire est atteinte (out-of-memory ou OOM), PHP utilisait une sortie abrupte reposant sur longjmp(). Si l’interruption survient pendant l’initialisation de structures liées à une requête, leur nettoyage peut ensuite interpréter des données incomplètes comme si elles étaient valides. Cette corruption peut ouvrir la voie à une exécution de code.
Certains états globaux (erreurs, sessions, extensions ou objets) peuvent conserver une référence à une zone mémoire déjà libérée. Si le même processus PHP traite ensuite une autre requête avant de réinitialiser cet état, il peut réutiliser cette référence périmée. C’est un défaut de type use-after-free.
Dans la première faille, le traitement de certaines requêtes multipart, comme celles utilisées pour les formulaires et les fichiers envoyés au serveur, peut provoquer une pression mémoire inattendue. Dans la seconde, une erreur fatale ou certains diagnostics peuvent laisser subsister un état qui sera consommé lors d’une requête ultérieure. Les avis techniques de PHP détaillent ces familles de scénarios, sans qu’un formulaire vulnérable dans le code métier soit nécessaire dans tous les cas.
Pour Apache avec mod_php, l’équipe PHP considère le risque particulièrement élevé : une démonstration montre qu’une requête non authentifiée peut atteindre le chemin vulnérable avant toute exécution du code applicatif. PHP-FPM n’est pas pour autant hors de danger : le traitement des erreurs et les chemins d’exploitation ne sont pas identiques, mais PHP le classe également parmi les environnements concernés.
Une exploitation réussie peut permettre d’agir avec les privilèges du processus PHP : lire des fichiers accessibles au service, récupérer des secrets applicatifs, compromettre une base de données si ses identifiants sont disponibles, modifier du contenu ou perturber le service. L’étendue des conséquences dépend des permissions, de l’isolation et de l’architecture du serveur.
Le périmètre ne se limite pas aux sites qui affichent visiblement « PHP ». Une application peut utiliser PHP derrière un proxy, un CDN, un conteneur ou une plateforme managée. Le CERT-EU cite les principales interfaces web exécutant PHP : mod_php, PHP-FPM, php-cgi, FrankenPHP et LiteSpeed.
| Environnement | Point à vérifier |
|---|---|
| WordPress, Drupal, PrestaShop, Magento | Le runtime PHP réel du serveur, indépendamment de la version du CMS |
| Symfony, Laravel, application PHP personnalisée | Le runtime des instances web, API, workers et déploiements concernés |
| Apache + mod_php | Mise à jour prioritaire : chemin critique pouvant survenir avant le code applicatif |
| Nginx + PHP-FPM, php-cgi, LiteSpeed, FrankenPHP | Version du runtime réellement chargé par les processus de service |
| Docker, Kubernetes, images CI/CD | Image de base, conteneurs effectivement redéployés et réplicas encore actifs |
| Hébergement mutualisé ou plateforme gérée | Version corrigée ou correctif rétroporté confirmé par l’opérateur |
Important : corriger WordPress, une extension ou une dépendance Composer ne corrige pas le moteur PHP. Inversement, un site au code applicatif correctement écrit peut rester exposé si son interpréteur n’a pas reçu le correctif.
Le CERT-FR considère les branches anciennes ainsi que toutes les versions antérieures aux correctifs suivants comme affectées :
| Branche | Versions à corriger | Version corrective PHP |
|---|---|---|
| PHP 8.5 | 8.5.0 à 8.5.11 | 8.5.12 |
| PHP 8.4 | 8.4.0 à 8.4.26 | 8.4.27 |
| PHP 8.3 | 8.3.0 à 8.3.35 | 8.3.36 |
| PHP 8.2 | 8.2.0 à 8.2.34 | 8.2.35 |
| PHP 8.1 et antérieures | Branches hors support officiel | Migration ou correctif rétroporté du fournisseur à vérifier |
Le projet PHP n’émet plus de versions officielles pour PHP 8.1 et les branches antérieures. Certains fournisseurs Linux et prestataires de support longue durée proposent néanmoins des correctifs rétroportés, sans changement de version majeure ou mineure. Un numéro ancien ne prouve donc pas à lui seul l’absence du correctif : il faut consulter les bulletins de la distribution et l’état du paquet installé.
PHP a aussi fourni des rétroportages minimaux de code source pour les branches 7.4, 8.0 et 8.1 ; cela ne signifie pas qu’elles retrouvent un support standard. PHP 8.2 atteint sa fin de vie le 31 décembre 2026 : sa correction immédiate doit idéalement s’accompagner d’un plan de migration.
La difficulté fréquente est de vérifier le bon PHP. Sur une même machine, la version lancée en terminal peut être différente de celle utilisée par Apache, PHP-FPM, un conteneur ou un sous-domaine. La vérification doit donc cibler le service web réellement en production.
Recenser les domaines, API, pools PHP-FPM, versions de paquets, images conteneurisées et tâches d’arrière-plan. Contrôler les versions effectives via l’administration de la plateforme, les commandes système ou un contrôle temporaire protégé côté application.
Comparer l’information à l’avis PHP ou au bulletin du fournisseur. Après correction, vérifier que les services ont redémarré ou que les nouveaux conteneurs ont été déployés. Confirmer qu’aucun ancien worker ne reçoit encore de trafic.
Quelques commandes de diagnostic, à adapter au système :
php -v
php --ini
php -v et php --ini décrivent l’environnement CLI, pas nécessairement celui qui traite les requêtes HTTP. Pour PHP-FPM, vérifier le binaire du pool concerné, ses fichiers de configuration et le service réellement lancé. Pour Docker ou Kubernetes, contrôler à la fois l’image reconstruite et les conteneurs ou pods actifs. Ne laissez jamais une page phpinfo() accessible publiquement pour effectuer ce contrôle.
mod_php et les applications contenant des données sensibles.En présence d’indices sérieux de compromission, une mise à jour n’efface pas nécessairement un accès malveillant déjà obtenu. Il faut alors isoler le système touché, préserver les journaux, examiner les fichiers et secrets exposés et appliquer une procédure de réponse à incident adaptée.
PHP insiste sur ce point : aucune mesure de contournement n’apporte une protection complète. Le CERT-EU recommande d’envisager l’isolement temporaire des services publics dont la correction ne peut pas être appliquée et vérifiée.
Des règles WAF, la limitation des requêtes multipart ou la désactivation de certaines fonctionnalités peuvent diminuer l’exposition à des scénarios documentés, mais elles ne suppriment pas les deux vulnérabilités. Certaines protections peuvent aussi bloquer les formulaires ou les téléchargements de fichiers légitimes : évaluez leurs conséquences avant déploiement.
À titre d’exemple, le CERT-FR mentionne la désactivation de la progression des téléversements de session via session.upload_progress.enabled=Off et, selon les cas, un filtrage du trafic multipart. Le projet PHP cite également des ajustements liés à memory_limit pour limiter certains chemins de la première faille. Ces adaptations sont partielles et parfois délicates à exploiter de manière sûre : elles doivent être décidées par l’administrateur responsable, contrôlées sur l’ensemble des processus et supprimées ou réévaluées après installation des correctifs.
Évitez de conclure à l’absence de risque simplement parce qu’un WAF est actif, qu’un scanner externe ne détecte rien ou que les erreurs PHP ne sont pas affichées dans le navigateur. Aucun de ces constats ne prouve que la mémoire du runtime est corrigée.
Pas nécessairement. WordPress et ses extensions sont des composants distincts du moteur PHP. Il faut mettre à jour chacun de ces niveaux et vérifier en particulier la version de PHP réellement utilisée par le site.
Le chemin d’exploitation démontré avec mod_php est particulièrement préoccupant, mais PHP inclut aussi PHP-FPM parmi les environnements à corriger. Le niveau de risque est différent d’une architecture à l’autre ; il ne faut pas assimiler « moins directement démontré » à « non vulnérable ».
L’opérateur gère souvent le moteur PHP, mais les responsabilités dépendent du contrat et de l’offre. Demandez la confirmation du correctif, consultez les notifications de maintenance et effectuez les vérifications fonctionnelles de votre site.
Non si PHP est embarqué dans les images applicatives. Il faut reconstruire les images à partir d’une base corrigée, redéployer tous les réplicas et vérifier qu’aucune ancienne instance ne reste en production.
Le CERT-EU indique le 21 octobre que des démonstrations de faisabilité circulent publiquement, ce qui accroît la probabilité d’attaques. Ce constat ne permet pas d’affirmer qu’un site donné a été compromis. Pour les services exposés, la priorité reste la correction rapide et la surveillance des journaux.
Elle constitue une étape, pas une preuve finale. Il faut vérifier la bonne source de paquets, la mise à jour de toutes les instances, le redémarrage effectif des processus et le fonctionnement de l’application après déploiement.
PHP2Shell rappelle une réalité souvent négligée : la sécurité d’un site ne dépend pas uniquement de la qualité du code métier, des extensions installées ou du framework. Elle dépend aussi du moteur qui exécute ce code, de la gestion de sa mémoire et de la discipline de mise à jour des environnements de production.
La bonne stratégie est donc concrète : inventorier, corriger, redéployer, vérifier et surveiller. Les organisations qui ne peuvent pas appliquer rapidement les correctifs doivent arbitrer explicitement le maintien de leurs services exposés à Internet.
Article fondé sur les bulletins publics du 21 octobre 2026. Les consignes de remédiation peuvent être complétées par les mainteneurs et les fournisseurs des distributions.
WEB & CYBERSÉCURITÉ
Audit du code, dépendances, parcours sensibles et stratégie de mise à jour : transformez une alerte technique en plan d’action maîtrisé.
Saisissez au moins 2 caractères pour lancer la recherche.