Ce que corrigent ces deux avis
Les deux avis visent ext/openssl, l'extension qui gère le chiffrement TLS des flux PHP. Ils ne concernent pas les visiteurs de votre site : ils concernent les connexions que votre code PHP ouvre vers l'extérieur, par exemple un file_get_contents('https://…'), un fopen sur une URL https ou un stream_socket_client en tls://.
Dans ces cas, PHP vérifie que le certificat présenté par le serveur distant correspond au nom d'hôte demandé. C'est l'option verify_peer_name, active par défaut. Les deux failles se logent dans ce contrôle. L'avis de CVE-2026-91769 (GHSA-vvx9-73fr-5jjx) décrit une vérification trop permissive. Celui de CVE-2026-91767 (GHSA-xr7j-rvgx-xq5p) décrit une lecture hors tampon dans la comparaison des noms à joker. Les deux ont été publiés le même jour, le 24 septembre 2026, et sont corrigés par les mêmes versions.
L'essentiel en sept points
- CVE-2026-91769 — sévérité modérée, CVSS 3.1 de 4.3. La vérification du nom de pair consulte d'abord les
subjectAltName, puis retombe sur le Common Name même lorsque le certificat présente un SAN DNS qui ne correspond pas. - CVE-2026-91767 — sévérité modérée, CVSS 3.1 de 6.5 (CWE-122). Dans
php_openssl_matches_wildcard_name(), un sous-dépassement de longueur passé àmemchr()provoque une lecture hors tampon quand le nom à joker du certificat a plus de caractères littéraux que l'hôte vérifié. - Versions corrigées — PHP 8.2.34, 8.3.35, 8.4.26 et 8.5.11, pour les deux failles. Les versions 8.4.26 et 8.5.11 figurent au changelog de PHP à la date du 24 septembre 2026.
- Qui est concerné — les clients qui s'appuient sur la valeur par défaut de
verify_peer_name, viafile_get_contents(),fopen()etstream_socket_client()surhttps://ettls://. - Contournement — l'avis n'en indique aucun. Désactiver la vérification n'en est pas un, c'est une faille de plus.
- Branches 8.1 et antérieures — en fin de vie, sans correctif amont. Des correctifs de distribution ou des backports tiers existent peut-être : à vérifier paquet par paquet.
- Exploitation — nous n'avons trouvé, dans les sources consultées, aucune exploitation constatée de ces deux failles.
Ce que ces failles permettent, et ce qu'elles ne permettent pas
CVE-2026-91769 permet une usurpation d'hôte. Un certificat que votre client approuve pour un hôte peut servir à se faire passer pour un autre, si son Common Name contient le nom visé. La RFC 6125 dit d'ignorer le CN lorsqu'un SAN DNS est présent, et PHP ne le faisait pas. L'avis juge le cas surtout pertinent en PKI privée, c'est-à-dire avec une autorité interne qui émet des certificats pour de nombreux services.
CVE-2026-91767 permet de faire planter un client PHP. Un serveur malveillant, ou à autorité approuvée, peut provoquer la lecture hors tampon pendant la vérification : c'est un déni de service. L'avis précise que le résultat n'influe que sur la décision accepter ou refuser et ne renvoie aucun contenu du tas. Une réserve honnête : le vecteur CVSS note la confidentialité Haute et la disponibilité Aucune, ce qui ne colle pas au texte de l'impact. Nous le signalons sans trancher.
Ce qu'elles ne permettent pas. L'avis ne décrit aucune exécution de code. Aucune des deux ne se déclenche par une requête de visiteur arrivant sur votre site. Les deux vecteurs sont de type réseau adjacent (AV:A) : l'attaquant doit être proche de la communication, pas n'importe où sur Internet.
Notées modérées : est-ce urgent ?
Réponse honnête : rien, dans les sources que nous avons consultées, n'indique que ces failles soient exploitées. Nous n'affirmons rien au-delà. Elles ne se comparent pas à PHP2Shell (CVE-2026-109618 et CVE-2026-109619), qui vise l'interpréteur lui-même et se déclenche par une requête HTTP anonyme. Cette faille est traitée à part dans notre article sur PHP2Shell ; la dernière version de votre branche, que cet article vous demande d'installer, contient aussi ces correctifs.
L'urgence est donc graduée. Elle est réelle si votre code appelle des URL externes avec les flux PHP (API de paiement, webhooks sortants, import de flux, vérification de licences) ou des services internes dont les certificats viennent d'une PKI privée. Elle l'est beaucoup moins pour un site vitrine qui n'émet aucun appel sortant. Dans les deux cas, le correctif reste dans la même branche : intégrez-le à votre prochain créneau de maintenance plutôt que de le repousser sans date.
Mesurer votre exposition en quatre étapes
Relevez la version de PHP réellement servie
Sur le serveur, lancez
php -r 'echo PHP_VERSION, PHP_EOL;'. Ne vous fiez pas àOPENSSL_VERSION_TEXT: ce n'est pas la bibliothèque OpenSSL du système qui est corrigée, c'est le code de l'extension, donc la version de PHP. Attention, le CLI peut différer de ce que servent vos sites : sur un serveur qui héberge plusieurs branches, relevez aussi la version de chaque pool PHP-FPM (étape de vérification plus bas). Sur cPanel, la version se lit par domaine, voir notre guide du sélecteur PHP.Cherchez les appels qui passent par les flux PHP
Listez les appels sortants avec une URL en clair dans le code :
grep -rnE "(file_get_contents|fopen)\(\s*['\"]https?://|stream_socket_client\(\s*['\"]tls://" /var/www --include='*.php'. Sur un hébergement cPanel, remplacez/var/wwwpar/home. Complétez avec les appels dont l'URL vient d'une variable :grep -rnE "(file_get_contents|fopen|stream_socket_client)\(\s*\$" /var/www --include='*.php'. Pensez aux plugins WordPress et au dossiervendor: c'est souvent là que se cachent les appels sortants.Repérez les vérifications déjà désactivées
Lancez
grep -rn "verify_peer_name" /var/www --include='*.php'. Une valeur àfalsesignifie qu'aucun nom d'hôte n'est vérifié du tout : ce code est exposé à bien plus que ces deux avis, quelle que soit la version de PHP. Corrigez-le avant tout le reste.Classez vos sites
Un site est prioritaire s'il cumule une branche en dessous du plancher du tableau suivant et des appels sortants par les flux. Les appels passés par l'extension cURL ne sont pas cités par l'avis, qui liste les flux PHP. WordPress et la plupart des bibliothèques HTTP utilisent en général cURL quand il est disponible, mais retombent sur les flux sinon : ne les excluez pas sans vérifier.
Quelle version installer selon votre branche
Faites défiler le tableau
| Branche PHP | Version minimale corrigée | Statut |
|---|---|---|
| 8.5 | 8.5.11 | Corrigée. Installez la dernière 8.5 disponible. |
| 8.4 | 8.4.26 | Corrigée. Installez la dernière 8.4 disponible. |
| 8.3 | 8.3.35 | Corrigée. Installez la dernière 8.3 disponible. |
| 8.2 | 8.2.34 | Corrigée. Planifiez la sortie de cette branche, voir la checklist liée en fin d'article. |
| 8.1 et antérieures (5.6 à 8.1) | Aucune version amont | Fin de vie. Correctif de distribution ou backport tiers à vérifier, sinon migration. |
Appliquer le correctif selon votre environnement
Debian et Ubuntu
Mettez l'index à jour avec
sudo apt update, puis les paquets de votre branche avecsudo apt install --only-upgrade 'php8.3*'(remplacez 8.3 par votre branche). Pour voir ce qui est en attente :apt list --upgradable 2>/dev/null | grep -i php. Les distributions corrigent souvent par backport sans changer le numéro amont : lisez le journal du paquet avecapt changelog php8.3-cli | grep -i CVE-2026-91769. Avec un dépôt tiers de type Sury, les mêmes commandes s'appliquent.RHEL, AlmaLinux et Rocky Linux
Lancez
sudo dnf update 'php*'. Si vous utilisez un flux de modules, la branche suit le module activé :dnf module list --enabled phpla donne. Contrôlez ensuite le journal avecrpm -q --changelog php-cli | grep -i CVE-2026-91769. Avec un dépôt tiers, les noms de paquets changent : adaptez le motif à ce que renvoierpm -qa 'php*'.cPanel : EasyApache 4 et sélecteur PHP
Les branches d'EasyApache 4 sont des paquets
ea-php83,ea-php84, etc. Si vous avez le root, listez-les avecrpm -qa 'ea-php*' | sortpuis mettez-les à jour avecsudo dnf update 'ea-php*'. Lisez le journal avecrpm -qa --changelog 'ea-php83*' | grep -i CVE-2026-91769et la version réelle avec/opt/cpanel/ea-php83/root/usr/bin/php -v. Sur un hébergement mutualisé, c'est l'hébergeur qui met à jour : votre part consiste à vérifier, dans le sélecteur PHP de cPanel (MultiPHP Manager, ou Select PHP Version sous CloudLinux), que chaque domaine tourne sur une branche corrigée.Docker
Une image ne se corrige pas en place : reconstruisez-la en tirant la base à jour avec
docker build --pull --no-cache -t votre-image ., oudocker compose build --pull --no-cacheavec Compose, puis relancez avecdocker compose up -d. Vérifiez le résultat dans le conteneur avecdocker run --rm votre-image php -v. Une étiquette flottante commephp:8.4-fpmn'avance que si l'image amont a été reconstruite : le numéro affiché fait foi, pas le nom de l'étiquette.Redémarrez les services PHP
PHP-FPM et Apache gardent l'ancien code en mémoire tant qu'on ne les recharge pas. Sur Debian ou Ubuntu :
sudo systemctl restart php8.3-fpm(adaptez la branche), etsudo systemctl restart apache2si vous utilisezmod_php. Sur RHEL ou AlmaLinux :sudo systemctl restart httpd. Sur cPanel avec PHP-FPM,systemctl list-units 'ea-php*'donne le nom exact du service à redémarrer.Vérifiez la version réellement servie
Le CLI n'est pas le service web. Interrogez le binaire FPM :
php-fpm8.3 -vsur Debian et Ubuntu,php-fpm -vsur RHEL et dérivés, ou la version du domaine dans cPanel. Le numéro doit atteindre le plancher de votre branche, ou son journal doit citer CVE-2026-91769. Terminez par un appel sortant de test :php -r 'echo strlen(file_get_contents("https://votre-domaine.com/")), PHP_EOL;'.
Si votre branche est en fin de vie (8.1 et avant)
D'après HeroDevs, les branches PHP 5.6 à 8.1 sont en fin de vie et ne reçoivent pas de correctif amont pour ces failles. Ne présumez rien dans un sens ni dans l'autre. Votre distribution a peut-être rétroporté le correctif dans son paquet : c'est possible, ce n'est pas garanti, et cela se vérifie paquet par paquet, avec le journal des modifications (apt changelog, rpm -q --changelog) et le suivi de sécurité de la distribution. Des éditeurs tiers proposent aussi des backports pour les versions abandonnées.
Sans correctif confirmé, vous avez trois leviers. Le premier est la migration vers une branche maintenue, 8.3 ou 8.4 après test de votre site : la méthode est dans notre checklist de migration PHP. Le deuxième est de limiter les appels sortants de ce code vers des hôtes dont vous maîtrisez les certificats. Le troisième est de restreindre le trafic sortant du serveur au pare-feu. Les deux derniers réduisent l'exposition, ils ne corrigent rien.
Ne mettez jamais verify_peer_name à false
Face à une erreur de certificat, la tentation est d'ajouter verify_peer_name => false dans un stream_context_create. C'est pire que la faille : plus aucun nom d'hôte n'est vérifié, donc n'importe quel certificat approuvé passe pour n'importe quel hôte. L'avis n'indique aucun contournement, et cette option n'en est pas un. Quand une connexion échoue après la mise à jour, réparez le certificat.
Un troisième correctif OpenSSL du même trimestre
CVE-2026-14355 est une faille distincte : une corruption mémoire dans openssl_encrypt() avec l'algorithme AES-WRAP-PAD (GH-22187). D'après le changelog de PHP (https://www.php.net/ChangeLog-8.php), elle est corrigée dans PHP 8.4.23, daté du 3 juillet 2026, et dans PHP 8.5.8, daté du 2 juillet 2026. Elle touche le chiffrement, pas la vérification TLS : elle ne change rien au test d'exposition ci-dessus.
Si vous installez 8.4.26 ou 8.5.11 ou plus, vous avez déjà ce correctif. Pour les branches 8.2 et 8.3, nous ne citons pas de version, faute de l'avoir vérifiée : lisez le journal de votre paquet pour savoir si CVE-2026-14355 y figure.
Dépannage après la mise à jour
Le correctif durcit un contrôle. Certains appels qui passaient avant peuvent donc échouer maintenant, et c'est la conséquence attendue du correctif, pas une régression. Le cas à tester en premier est un service interne dont le certificat vient d'une autorité privée. Voici les messages réels que vous pouvez rencontrer et le remède qui convient.
Les erreurs rencontrées et leurs remèdes
SSL operation failed with code 1puiscertificate verify failed— message complet typique :stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed. Cause probable : le certificat présente un SAN DNS qui ne contient pas l'hôte appelé, mais son CN le contient. L'ancienne vérification l'acceptait par repli sur le CN, la nouvelle le refuse. Lisez le certificat avecopenssl s_client -connect interne.votre-domaine.com:443 -servername interne.votre-domaine.com </dev/null 2>/dev/null | openssl x509 -noout -subject -ext subjectAltName. Remède : réémettre le certificat avec un SAN DNS correct pour chaque nom utilisé, jamais désactiver la vérification.file_get_contents(): Failed to enable crypto— avertissement qui accompagne le précédent. Lisez le message complet qui suit : selon la version, vous pouvez aussi trouverPeer certificate CN=… did not match expected CN=…. Même cause, même remède.- Un certificat sans aucun SAN, avec un CN seul, échoue quand même — le correctif conserve le repli sur le CN pour les certificats sans identifiant de service. La cause est donc ailleurs : autorité non approuvée par le client, hôte appelé par un alias ou une adresse IP absents du certificat, certificat expiré. Remède : ajouter l'autorité interne à
cafiledans le contexte du flux, et réémettre le certificat avec un SAN. child exited on signal 11 (SIGSEGV)dans le journal de PHP-FPM — un worker qui plante au moment d'un appel sortant TLS est compatible avec CVE-2026-91767. Ne concluez pas sur ce seul indice : vérifiez la version, mettez à jour et regardez si le motif disparaît.php -vaffiche encore l'ancienne version — service non redémarré, CLI et FPM de branches différentes, image Docker reconstruite sans--pull, ou version du domaine inchangée dans cPanel. Reprenez l'étape de vérification.- Le journal de la distribution ne cite pas la CVE — son absence ne prouve ni que le correctif est là, ni qu'il manque. Consultez le suivi de sécurité de la distribution, et à défaut comparez le numéro amont au plancher du tableau.
Fixer la mise à jour dans votre routine
Reportez le plancher dans votre inventaire
Ajoutez à votre inventaire de parc une colonne « version minimale » par branche, avec les valeurs du tableau. Une version sous le plancher devient visible sans recherche.
Planifiez les mises à jour de PHP
Un correctif de sécurité de PHP est une mise à jour mineure de la même branche : prévoyez un créneau régulier plutôt qu'un chantier à chaque avis, avec redémarrage des services et vérification de la version servie.
Testez un appel sortant après chaque mise à jour
Rejouez
php -r 'echo strlen(file_get_contents("https://votre-domaine.com/")), PHP_EOL;'depuis chaque serveur, et un appel vers vos services internes. Une erreur de certificat apparaît alors tout de suite, pas chez un client.Reliez ce correctif au reste de votre veille
Pour la méthode de relevé sur un parc, lisez l'inventaire des versions PHP d'un parc clients. Pour la faille la plus critique du moment, voir PHP2Shell. Pour changer la version d'un site, suivez le guide du sélecteur PHP de cPanel. Pour une branche qui s'éteint, reprenez la checklist de migration de PHP 8.2.