PHP2Shell et Node2Shell : que faire maintenant
Le mercredi 21 octobre 2026, PHP et Node.js ont tous deux publié une mise à jour de sécurité urgente. Les failles ont vite reçu un nom : PHP2Shell et Node2Shell. À eux deux, ces environnements font tourner une grande partie du web, des sites WordPress et Laravel aux applications web et API en JavaScript. Voici ce qui se passe, qui est exposé et ce que vous pouvez faire dès aujourd’hui.
PHP2Shell : deux failles dans PHP lui-même
PHP2Shell désigne deux failles critiques au cœur de PHP, CVE-2026-109618 et CVE-2026-109619. Toutes deux permettent à un attaquant d’exécuter du code à distance sur le serveur.
- CVE-2026-109618 : si PHP manque de mémoire alors qu’il prépare encore une requête, le nettoyage qui suit peut traiter des données à moitié construites comme valides.
- CVE-2026-109619 : des données internes d’une requête peuvent subsister après la libération de leur mémoire. Une requête suivante traitée par le même processus peut alors utiliser ces données périmées.
Selon le projet PHP, toute installation PHP qui traite des requêtes web est exposée : PHP-FPM, Apache avec mod_php, php-cgi, FrankenPHP et LiteSpeed. Le risque est le plus élevé avec mod_php, où une attaque a été démontrée avec une requête non authentifiée, avant même l’exécution de la moindre ligne de votre application.
La solution, c’est la mise à jour. Ces versions contiennent le correctif :
| Branche PHP | Version corrigée |
|---|---|
| 8.5 | 8.5.12 |
| 8.4 | 8.4.27 |
| 8.3 | 8.3.36 |
| 8.2 | 8.2.35 |
PHP 8.1 et les versions antérieures ne reçoivent plus de mises à jour officielles. Le projet PHP a toutefois publié des correctifs pour 7.4, 8.0 et 8.1, et certaines distributions et fournisseurs de support à long terme proposent des versions corrigées. À noter aussi : PHP 8.2 ne recevra plus de correctifs de sécurité après le 31 décembre 2026.
Si vous ne pouvez pas mettre à jour aujourd’hui, quelques réglages réduisent le risque, même si, selon le projet PHP, ils ne rendent pas une installation sûre. Mettez session.upload_progress.enabled=0 dans php.ini ou dans le pool FPM et redémarrez tous les processus ; ini_set() ou un .user.ini ne suffit pas. Gardez post_max_size bas et limitez la taille et la complexité des requêtes au niveau du serveur web ou du proxy. Après un avis lié publié le 23 octobre (CVE-2026-115560), le projet PHP recommande de laisser upload progress désactivé jusqu’à la prochaine version corrective.
Les sources divergent sur l’exploitation réelle. Des détails ont fuité avant la publication officielle et Amazon a signalé une tentative d’exploitation sur ses honeypots. La direction de la PHP Foundation a en revanche déclaré n’avoir vu aucune preuve d’exploit fonctionnel. N’attendez pas la réponse : une fois la mise à jour faite, la question ne se pose plus.
Node2Shell : une faille dans la décompression Brotli
Node2Shell, c’est CVE-2026-111497, une faille dans le décodeur Brotli fourni avec Node.js. Une entrée compressée malformée peut écrire au-delà de la fin d’un tampon interne. Selon Node.js, un attaquant capable de fournir des données Brotli que votre application décompresse avec node:zlib peut corrompre la mémoire du processus, avec à la clé un plantage, une fuite de mémoire ou l’exécution de code.
Le risque concerne donc les applications qui décompressent des données venues de l’extérieur : par exemple une API qui accepte des requêtes avec Content-Encoding: br, un proxy ou une passerelle, ou un logiciel qui traite des fichiers envoyés par les utilisateurs.
| Branche Node.js | Version corrigée |
|---|---|
| 26.x | 26.12.1 |
| 24.x | 24.22.1 |
| 22.x | 22.23.4 |
| 20.x et 25.x | pas de correctif : fin de vie |
Deux points à retenir :
- Mettre à jour un paquet npm ne sert à rien. Le code vulnérable fait partie de Node.js lui-même. Seule une nouvelle version de Node.js corrige le problème.
- Le problème dépasse Node.js. La cause se trouve dans la bibliothèque Brotli de Google (versions 1.0.3 à 1.2.0). Le paquet Python Brotli est également touché, et selon les chercheurs d’Aikido, le runtime Bun aussi.
Node.js ne propose aucune solution de contournement. Si vous ne pouvez pas mettre à jour tout de suite, refuser les requêtes avec Content-Encoding: br au niveau du reverse proxy ou du répartiteur de charge réduit le risque. La même version corrige d’ailleurs d’autres problèmes sérieux, notamment dans la vérification des certificats TLS (CVE-2026-106069, CVE-2026-105483) et les résolutions DNS (CVE-2026-105482). La mise à jour vaut donc la peine dans tous les cas.
Ce que vous faites aujourd’hui
- Repérez où tournent PHP et Node.js : serveurs, conteneurs, hébergements, outils internes et chaînes de build.
- Vérifiez la version là où le logiciel tourne réellement, avec
php -vounode -vdans le conteneur, pas sur votre propre ordinateur. - Mettez à jour vers une version corrigée. Pour les conteneurs, cela veut dire reconstruire l’image sur une base à jour et la redéployer.
- Planifiez une mise à niveau de tout ce qui n’est plus maintenu : PHP 8.1 et antérieur, Node.js 20 et 25.
- Si vous ne pouvez pas mettre à jour tout de suite, appliquez les mesures temporaires ci-dessus et surveillez vos journaux à la recherche de processus qui plantent et de requêtes inhabituelles.
- Si votre site est hébergé ou géré par un partenaire, demandez-lui de confirmer les numéros de version exacts.
Comment Skedia vous aide avec un audit de sécurité
Nous avons d’abord fait l’exercice chez nous. En une journée, nous avions vérifié chaque conteneur que nous gérons, et les sites que nous développons et hébergeons tournent tous sur une version de Node.js à jour. Nous proposons la même démarche sous forme d’audit de sécurité :
- Inventaire : quels logiciels, versions et dépendances tournent, et ce qui ne reçoit plus de mises à jour.
- Plan de mise à jour : dans quel ordre mettre à jour et redéployer, sans interrompre votre site ou votre application.
- Configuration : des réglages sûrs pour PHP, Node.js et votre serveur web, avec des en-têtes de sécurité et une Content Security Policy.
- Code : un regard critique sur les points d’entrée des données externes, comme les envois de fichiers, les formulaires et la décompression.
- Suivi : remontée des erreurs et surveillance, pour voir un problème avant vos clients.
- Rapport : un compte rendu clair, en langage simple, avec des priorités et des prochaines étapes concrètes.
Vous voulez être sûr que votre site ou votre application n’est pas exposé à PHP2Shell, à Node2Shell ou à la prochaine faille ? Contactez-nous pour un audit.
Sources
- PHP : avis de sécurité du 21 octobre 2026
- Node.js : mises à jour de sécurité du 21 octobre 2026
- GitHub Advisory : faille Brotli dans le paquet PyPI (GHSA-9v8h-qqgm-4m35)
- Qualys : PHP2Shell: find, mitigate, and patch now
- watchTowr : PHP2Shell FAQ
- Aikido : Node2Shell: Node.js Brotli RCE