Ce qui se passe
Le 26 octobre 2026, l'équipe PHP a republié ses paquets Windows officiels pour PHP 8.2, 8.3, 8.4 et 8.5. Ils contenaient Brotli 1.2.0, la bibliothèque de compression, touchée par CVE-2026-111497 : une corruption de mémoire qui peut mener à l'exécution de code. Les nouveaux builds embarquent Brotli 1.2.1.
Les fichiers à chercher portent un suffixe -1 :
| Ligne | Nouveau build |
|---|---|
| 8.5 | 8.5.12-1 |
| 8.4 | 8.4.27-1 |
| 8.3 | 8.3.36-1 |
| 8.2 | 8.2.35-1 |
Ils arrivent cinq jours après les versions du 21 octobre qui corrigeaient
PHP2Shell (CVE-2026-109618, CVE-2026-109619). Le code PHP est le même, donc
ces correctifs-là restent en place. Le 26 octobre, la CISA a d'ailleurs inscrit
ces deux CVE à son catalogue des vulnérabilités exploitées (KEV).
Par où la faille s'atteint
Seul le chemin cURL est concerné : l'extension décompresse une réponse HTTP,
Brotli y compris, quand la décompression automatique est active. cURL la laisse
éteinte par défaut, mais une application ou une bibliothèque cliente peut
l'allumer avec l'option CURLOPT_ENCODING ; une valeur vide accepte tous les
formats que cURL sait lire.
Guzzle (7.16.1 et 8.3.1) pose justement cette valeur vide par défaut. D'après ce code et la description de PHP, une application qui garde les réglages de Guzzle remplit donc la condition sur les builds du 21 octobre. The Hacker News précise ne pas l'avoir testé sous Windows.
L'attaque passerait par une réponse compressée fabriquée, renvoyée par un serveur que votre application appelle.
Gravité et exploitation
- Google note la faille 9,2 (CVSS 4.0, critique) ; Red Hat 8,1 (CVSS 3.1, importante).
- Des chercheurs d'OpenAI l'ont trouvée ; Brotli a publié les correctifs 1.2.1, 1.1.1 et 1.0.10 lors de la divulgation, le 21 octobre.
- Imperva a exécuté du code sur un build officiel de Node.js, après plusieurs essais. L'annonce de PHP ne mentionne aucune attaque, et la faille ne figurait pas au KEV dans l'évaluation de la CISA du 23 octobre.
Comment s'y prendre
- Téléchargez le build suffixé
-1sur la page Windows de php.net, par exemplephp-8.5.12-1-nts-Win32-vs17-x64.zip. - Ne comptez pas sur
php -v: la version est inchangée. Le suffixe du fichier et le SHA-256 de la page de téléchargement font foi. Les listes de composants (SBOM) des builds x64 Non Thread Safe du 21 octobre indiquent Brotli 1.2.0. - Aucun contournement n'est proposé par PHP. OpenAI recommande de couper la
décompression automatique des clients HTTP en attendant. Retirer
brdeAccept-Encodingne suffit pas : un serveur peut quand même répondre en Brotli.
Dans Guzzle, l'option qui coupe tout décodage automatique est decode_content.
Les réponses gzip arrivent alors compressées elles aussi.
$client = new GuzzleHttp\Client(['decode_content' => false]);Source : The Hacker News, 26 octobre 2026. Source en anglais. Annonce d'origine : php.net.