PHP2Shell : l'IA découvre deux zero-days RCE dans le cœur de PHP
Des modèles d’IA de pointe ont mis au jour deux vulnérabilités zero-day d’exécution de code à distance dissimulées depuis plus de dix ans dans le moteur PHP, imposant une mise à jour immédiate du runtime.
L’équipe de développement de PHP et The PHP Foundation ont publié le 21 octobre des mises à jour de sécurité d’urgence pour corriger deux vulnérabilités critiques d’exécution de code à distance (RCE) dans le runtime PHP. Regroupées sous le nom « PHP2Shell », ces failles sont répertoriées sous les identifiants CVE-2026-109618 et CVE-2026-109619. Toutes deux affichent un score CVSS v4.0 maximal de 9,2 (Critique), permettant à des attaquants distants non authentifiés d’exécuter du code arbitraire avec les privilèges du serveur web via de simples requêtes HTTP spécialement forgées.
Ces failles n’ont pas été identifiées lors d’un audit de code manuel, mais par des chercheurs en sécurité qui ont mobilisé des modèles d’IA de pointe pour inspecter les bases de code en langage C. L’IA de pointe (Frontier AI) désigne les modèles d’IA les plus avancés.
Une faille décennale dans le cœur de PHP mise au jour par l’IA
L’entreprise de cybersécurité Calif et le fournisseur de sécurité cloud Wiz ont découvert ces vulnérabilités de manière indépendante et les ont signalées de manière confidentielle en août 2026. L’équipe de Calif a mis en évidence ces défauts en confiant au modèle de raisonnement GPT-5.6 Sol d’OpenAI des tâches d’analyse statique et de vérification de la sécurité mémoire.
OpenAI a profité de cette découverte pour impulser son initiative « Patch the Planet ». Ce projet vise à mobiliser l’intelligence artificielle pour la cybersécurité défensive, en aidant les mainteneurs et les opérateurs d’infrastructures critiques à identifier et corriger les vulnérabilités majeures avant qu’elles ne soient exploitées.
Les deux failles étaient présentes dans le cœur de PHP depuis la version 5.4, persistant à travers chaque version jusqu’à PHP 8.5. Nichées au plus profond de routines complexes de gestion des erreurs et de nettoyage global, elles avaient échappé pendant plus d’une décennie aux outils de fuzzing traditionnels et aux revues de code humaines.
Corruption OOM et état global résiduel : le mécanisme des failles
Les deux vulnérabilités exploitent des lacunes dans la gestion de la mémoire et les procédures de récupération après erreur du runtime PHP.
La première faille, CVE-2026-109618, provient de la gestion du dépassement de mémoire (Out-of-Memory, OOM). Lorsqu’un script atteint son plafond memory_limit, PHP invoque la fonction C longjmp() pour interrompre brutalement l’exécution et nettoyer l’état de la requête. Cependant, si ce manque de mémoire survient pendant l’analyse de données de formulaire multipart ou de téléversements de fichiers, les structures de données internes restent incomplètement initialisées. Lors de la phase de nettoyage, PHP traite par erreur ces pointeurs invalides comme de la mémoire allouée normale, provoquant une corruption du tas (heap) que les attaquants peuvent détourner pour prendre le contrôle du flux d’exécution.
La seconde faille, CVE-2026-109619, concerne la persistance d’un état global d’une requête à l’autre. Pour optimiser les performances, le cœur de PHP autorise certains pointeurs globaux à référencer temporairement des zones mémoire allouées pour une requête spécifique. Lorsqu’une erreur fatale survient, ces pointeurs globaux peuvent ne pas être réinitialisés, créant une vulnérabilité classique de type use-after-free (utilisation de mémoire après libération). Quand le même processus worker prend en charge la requête suivante, il fait référence à cet état obsolète, ce qui entraîne une corruption de la mémoire et permet d’exécuter du code arbitraire.
Impact selon l’environnement serveur et risque des versions obsolètes
Comme ces vulnérabilités résident directement au sein de l’interpréteur PHP lui-même, les protections au niveau applicatif sont totalement inefficaces. Même une application WordPress ou Laravel parfaitement conçue, sans aucune injection SQL ni faille XSS, devient vulnérable dès que le serveur web transmet une requête malveillante au moteur PHP.
L’exposition varie en fonction de l’architecture du serveur :
- Apache mod_php : C’est la configuration la plus critique. PHP s’exécute directement dans la mémoire du serveur web sans isolation de processus, permettant à une requête non authentifiée de compromettre immédiatement le service.
- PHP-FPM et FastCGI : Les processus workers étant réutilisés pour traiter plusieurs requêtes consécutives, un attaquant peut provoquer une condition OOM pour corrompre un worker, puis envoyer une seconde requête pour exécuter du code.
La diffusion des correctifs pose un problème opérationnel majeur :
| Branche | Statut | Version corrigée |
|---|---|---|
| PHP 8.5 | Support actif | 8.5.12 |
| PHP 8.4 | Support actif | 8.4.27 |
| PHP 8.3 | Sécurité uniquement | 8.3.36 |
| PHP 8.2 | Sécurité uniquement | 8.2.35 |
| PHP 8.1 et versions antérieures | Fin de vie (EOL) | Aucun correctif officiel |
Une part substantielle du web mondial fonctionne encore sur des versions obsolètes telles que PHP 7.x, 8.0 et 8.1. Le projet PHP ne publiant pas de rétroportage de sécurité pour les branches non prises en charge, ces environnements resteront vulnérables tant qu’une migration vers une version maintenue n’aura pas été effectuée.
Priorités de correctif et mesures d’atténuation immédiates
Les agences de cybersécurité, notamment la CISA aux États-Unis, ont vivement encouragé les administrateurs à mettre à jour sans délai tous les serveurs PHP exposés sur Internet. Les équipes d’infrastructure doivent engager trois actions prioritaires :
- Mettre à jour les paquets du runtime : Appliquer sans attendre les versions corrigées (8.5.12, 8.4.27, 8.3.36 ou 8.2.35) via les gestionnaires de paquets du système ou les images de base de conteneurs.
- Isoler et migrer les versions EOL : Les organisations exploitant PHP 8.1 ou antérieur doivent planifier d’urgence une mise à niveau. Dans l’intervalle, configurez des règles strictes sur le pare-feu applicatif web (WAF) pour filtrer les téléversements et les requêtes multipart volumineuses.
- Limiter la réutilisation des workers : À titre de précaution temporaire sous PHP-FPM, réglez la directive
pm.max_requestssur 1 ou une valeur très faible. Le redémarrage forcé du worker après chaque requête neutralise le risque lié aux pointeurs résiduels (CVE-2026-109619), bien que cela induise un surcoût de performances.
Ce qu’il faut surveiller
Cet événement confirme que la recherche de failles assistée par IA a franchi un cap décisif dans la protection des infrastructures critiques. Des systèmes de raisonnement automatisés parviennent désormais à déceler des défauts de gestion mémoire en C que des décennies de contrôle humain n’avaient pas révélés.
Toutefois, ces mêmes technologies pourront également être exploitées par des acteurs malveillants pour découvrir des vulnérabilités zero-day à grande échelle. La capacité des mainteneurs open source et des équipes d’infrastructure à tenir ce rythme d’intervention défensive constituera le test décisif pour les écosystèmes logiciels modernes.
Sources
Source: thephp.foundation