CVE-2026-109618 · GHSA-w8hw-w9fx-j79w

CVE-2026-109618: RCE par corruption en cas de mémoire épuisée (OOM)

La moitié « mémoire épuisée » de PHP2Shell : un attaquant pousse PHP en manque de mémoire pendant l’analyse d’une requête, ce qui laisse des données à moitié initialisées auxquelles PHP fait ensuite confiance. Résultat : exécution de code sans authentification sous l’utilisateur du serveur web.

Dernière vérification 2026-10-22

Gravité

Critical · CVSS 4.0 9.2

Authentification

Non requise

Corrigé dans

8.5.12 · 8.4.27 · 8.3.36 · 8.2.35

Fait partie de

PHP2Shell (avec CVE-2026-109619)

Résumé

Quand la mémoire est épuisée, PHP interrompt le contexte courant avec longjmp(). Si cela survient alors que la mémoire de la requête n’est que partiellement initialisée, l’arrêt de la requête lit ensuite des données invalides ou s’y branche. Plusieurs chemins d’analyse multipart peuvent pousser PHP en OOM dans des limites normales, avant même l’exécution du code applicatif.

Impact : Exécution de code sans authentification sous l’utilisateur du worker web PHP. Démontré : RCE pré-authentification sur WordPress, Drupal et Joomla (mod_php, limites par défaut).

Cause

Face à un manque de mémoire, PHP lève une erreur fatale et sort du chemin de code courant avec longjmp(). Tout ce qui était à moitié construit à cet instant le reste.

Si de la mémoire de requête avait été allouée mais pas encore initialisée, l’arrêt de la requête lit ensuite ces données invalides ou s’y branche. Plusieurs chemins d’analyse multipart (formulaires d’envoi de fichiers) peuvent amener PHP à manquer de mémoire dans des limites normales — c’est pourquoi aucun code applicatif n’a besoin d’être impliqué.

Faiblesses listées par PHP : use-after-free (CWE-416), mauvaise gestion de conditions exceptionnelles (CWE-755), accès à un pointeur non initialisé (CWE-824) et CWE apparentées à la gestion d’état.

Chemins d’attaque connus

Use-after-free dans le désérialiseur de progression d’envoi

Le traitement de progression d’envoi décode des données de session avant la fin de l’initialisation de la requête. Un échec d’allocation libère le tas de la requête mais laisse en place la comptabilité globale du désérialiseur ; la requête suivante sur le worker traite de la mémoire réoccupée par l’attaquant comme un état actif.

Divulgation de mémoire à distance via PHPSESSID

Après une interruption OOM, un pointeur d’identifiant de session reste pendant. Une requête multipart ultérieure encode en URL la mémoire vers laquelle il pointe désormais dans le cookie PHPSESSID de la réponse — même si l’application ne démarre jamais de session.

L’avis de PHP et l’article de Wiz regroupent certains chemins différemment. Le correctif traite le schéma de défaillance commun : ce regroupement ne change rien à ce que vous devez faire.

Versions concernées et corrigées

BrancheVulnérableCorrigé dans
8.5< 8.5.128.5.12
8.4< 8.4.278.4.27
8.3< 8.3.368.3.36
8.2< 8.2.358.2.35
8.1 · 8.0 · 7.4toutesRétroportage source seulement
5.4 – 7.3toutesAucun correctif

Exposition selon la configuration serveur

Configuration…109618Remarques
Apache + mod_phpRCE confirméeLes deux CVE ont été confirmées jusqu’à la RCE avec les limites par défaut. Configuration la plus à risque.
PHP-FPM (nginx, Apache, Caddy…)ExposéRCE via le cycle de vie des sessions confirmée sur FPM. Chemin OOM confirmé via des chemins de code applicatifs ; aucun exploit FPM générique publié.
FrankenPHP / LiteSpeed LSAPIProbableL’avis les considère comme probablement exposés. Les workers de longue durée rendent l’état résiduel entre requêtes plus pertinent, pas moins.
CLI (cron, workers de file, artisan)Non traitéNon traité par les avis et non joignable par des requêtes HTTP en usage normal. Mettez à jour quand même — c’est le même paquet.

Score CVSS 4.0 : 9.2

Vecteur : CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

MétriqueSignification iciEffet

AV:N

Attack Vector: Network

Joignable par Internet avec des requêtes HTTP ordinaires.Augmente le score

AC:H

Attack Complexity: High

L’exploit doit être ajusté à la disposition mémoire de chaque cible ; ce n’est pas une requête à copier-coller.Baisse le score

AT:P

Attack Requirements: Present

La réussite dépend de conditions de déploiement (SAPI, limites, réutilisation des workers) que l’attaquant ne contrôle pas.Baisse le score

PR:N

Privileges Required: None

Pas de compte, pas de connexion.Augmente le score

UI:N

User Interaction: None

Personne n’a besoin de cliquer.Augmente le score

VC:H / VI:H / VA:H

Impact sur le système vulnérable : High

Perte totale de confidentialité, d’intégrité et de disponibilité sur le serveur PHP.Augmente le score

SC:N / SI:N / SA:N

Impact sur les systèmes suivants : None

Le score ne compte pas le rebond vers d’autres systèmes — en pratique, des identifiants volés le permettent souvent.Baisse le score

Correction et atténuations

La correction, c’est une mise à jour de PHP

Installez une version corrigée et redémarrez chaque worker PHP. Guide de mise à jour →

Si vous ne pouvez pas mettre à jour immédiatement, php.net liste ces mesures partielles :

  • memory_limit = -1 défini de façon à ce que les applications ne puissent pas le surcharger (php_admin_value dans le pool FPM ou la configuration Apache), associé à une limite mémoire de conteneur ou cgroup.
  • post_max_size bas : 8M sans envoi de fichiers, 32M avec ; gardez upload_max_filesize en dessous.
  • Imposez des limites au niveau du serveur web ou du proxy : taille décodée, nombre de champs, de parties multipart, d’en-têtes, profondeur d’imbrication.
  • N’utilisez pas RLIMIT_AS / RLIMIT_DATA (ulimit -v, LimitAS= de systemd) — ils déclenchent le même échec d’allocation vulnérable.

Références

Questions

CVE-2026-109618 est-elle exploitable sans se connecter ?+

Oui. Elle est atteinte pendant que PHP analyse la requête entrante, avant tout code applicatif, routage ou authentification.

Désactiver session.upload_progress corrige-t-il CVE-2026-109618 ?+

Non. Ce réglage vise des chemins confirmés de CVE-2026-109619. La principale atténuation de configuration contre CVE-2026-109618 est un memory_limit = -1 défini côté administration, associé à un plafond mémoire cgroup — et même cela reste incomplet.

Quelles versions corrigent CVE-2026-109618 ?+

PHP 8.5.12, 8.4.27, 8.3.36 et 8.2.35, publiées le 21 octobre 2026. Des rétroportages source existent pour 7.4, 8.0 et 8.1 ; les distributions livrent leurs propres paquets corrigés.

PHP-FPM est-il concerné par CVE-2026-109618 ?+

L’avis considère FPM comme exposé d’après l’analyse du code source, et la PHP Foundation indique que la RCE a été confirmée sur FPM via des chemins de code applicatifs. Le cas démontré le plus direct est Apache avec mod_php et les limites par défaut.

Voir aussi