Le 4 mai 2026, l’équipe de sécurité d’Apache a publié la version 2.4.67 du serveur HTTP Apache, corrigeant onze vulnérabilités dont une critique : CVE-2026-23918. Cette faille de type double-free dans le module mod_http2 affecte exclusivement Apache HTTP Server 2.4.66 et ouvre la voie à un déni de service trivial ainsi qu’à une éventuelle exécution de code à distance (RCE). Avec un score CVSS de 8.8, cette vulnérabilité est classée « High » et doit être traitée en priorité sur tous les serveurs concernés.
Les administrateurs systèmes utilisant Debian 12 (Bookworm), Debian 13 (Trixie) ou Ubuntu 26.04 LTS (Resolute) sont directement exposés si leur installation d’Apache inclut le module HTTP/2. Cet article détaille le mécanisme de la faille, les distributions et configurations touchées, et les procédures de mise à jour ou de mitigation à appliquer immédiatement.
Découverte indépendamment par Bartlomiej Dmitruk (striga.ai) et Stanislaw Strzalkowski (isec.pl) et signalée à l’équipe sécurité Apache dès le 10 décembre 2025, la vulnérabilité a été corrigée dans le dépôt en moins de 24 heures. La divulgation publique coordonnée n’a été effectuée qu’en mai 2026, lors de la sortie officielle d’Apache 2.4.67.
Comprendre la vulnérabilité CVE-2026-23918
Mécanisme technique
CVE-2026-23918 est une vulnérabilité de type double-free localisée dans le fichier h2_mplx.c du module mod_http2. Elle se manifeste dans le chemin de nettoyage (cleanup path) du multiplexeur HTTP/2 lors de scénarios de réinitialisation anticipée de flux.
Concrètement, la faille est déclenchée lorsqu’un client envoie une trame HTTP/2 HEADERS immédiatement suivie d’un RST_STREAM avec un code d’erreur non nul sur le même flux, avant que le multiplexeur n’ait eu le temps d’enregistrer ce flux. Ce timing particulier provoque la libération double d’une zone mémoire dans la couche APR (Apache Portable Runtime), conduisant à une corruption du tas (heap corruption).
Le vecteur DoS est trivial : deux trames HTTP/2 sur une seule connexion TCP suffisent à provoquer le crash d’un processus worker. Le vecteur RCE est plus exigeant : il requiert qu’Apache soit compilé avec l’allocateur mmap d’APR, ce qui est précisément le cas par défaut sur les systèmes dérivés de Debian et sur l’image Docker officielle d’Apache.
Configurations affectées
| Configuration | Exposée ? |
|---|---|
| Apache 2.4.66 + mod_http2 + MPM event | ✅ Oui (DoS + RCE potentiel) |
| Apache 2.4.66 + mod_http2 + MPM worker | ✅ Oui (DoS + RCE potentiel) |
| Apache 2.4.66 + mod_http2 + MPM prefork | ❌ Non |
| Apache 2.4.66 sans mod_http2 | ❌ Non |
| Apache ≤ 2.4.65 | ❌ Non |
| Apache ≥ 2.4.67 | ❌ Corrigé |
Les MPM multi-threadés event et worker sont les seuls vecteurs d’exploitation. Le MPM prefork, qui utilise un modèle de traitement mono-thread par processus, n’est pas affecté car la condition de course à l’origine du double-free ne peut pas se produire dans ce contexte.
Vérifier si votre serveur est vulnérable
Avant toute action corrective, vérifiez la version d’Apache installée, le MPM actif et l’état du module HTTP/2.
Vérifier la version d’Apache
apache2 -v
Si la sortie indique Server version: Apache/2.4.66, votre installation est potentiellement vulnérable.
Vérifier le MPM utilisé
apache2ctl -M | grep mpm
La présence de mpm_event_module ou mpm_worker_module indique un MPM multi-threadé. La présence de mpm_prefork_module signifie que vous n’êtes pas exposé au vecteur RCE.
Vérifier si mod_http2 est actif
apache2ctl -M | grep http2
Si la commande retourne http2_module (shared), le module est chargé et votre serveur est exposé. Vous pouvez compléter la vérification via la configuration :
grep -r "Protocols.*h2" /etc/apache2/
Correctifs officiels par distribution
Debian 12 (Bookworm) et Debian 13 (Trixie)
Les équipes de sécurité Debian ont publié des paquets corrigés basés sur Apache 2.4.67 pour toutes les distributions en support actif. La version corrigée est 2.4.67-1~deb12u2 sur Bookworm et 2.4.67-1~deb13u2 sur Trixie. Debian 11 (Bullseye) ne semble pas impacté par cette faille selon https://security-tracker.debian.org/tracker/CVE-2026-23918
# Mettre à jour les listes de paquets depuis les dépôts security
sudo apt update
# Vérifier la version disponible avant installation
apt-cache policy apache2
# Installer la mise à jour de sécurité
sudo apt install apache2
# Redémarrer Apache après la mise à jour
sudo systemctl restart apache2
# Vérifier la version installée
apache2 -v
Pour confirmer que le correctif est bien appliqué :
dpkg -l apache2 | awk '/^ii/{print $2, $3}'
La version affichée doit être au minimum 2.4.67-1~deb12u2 sur Bookworm ou 2.4.67-1~deb13u2 sur Trixie.
Ubuntu 26.04 LTS (Resolute)
Ubuntu 26.04 LTS est la seule version Ubuntu LTS active à inclure Apache 2.4.66 dans ses dépôts. Les versions 24.04, 22.04 et 20.04 LTS embarquent des versions antérieures d’Apache et ne sont pas affectées par cette CVE. Canonical a publié le bulletin de sécurité USN-8239-1 le 6 mai 2026. Le paquet corrigé est apache2 2.4.66-2ubuntu2.1.
# Mettre à jour les listes de paquets
sudo apt update
# Installer la mise à jour
sudo apt install apache2
# Vérifier la version installée
dpkg -l apache2 | awk '/^ii/{print $2, $3}'
# Résultat attendu : apache2 2.4.66-2ubuntu2.1
# Redémarrer le service
sudo systemctl restart apache2
sudo systemctl status apache2
Mitigations temporaires
Si vous ne pouvez pas appliquer le correctif dans les 24 à 48 heures suivant la détection de votre exposition, deux mitigations permettent de neutraliser la vulnérabilité dans l’attente d’une mise à jour planifiée.
Option 1 : Désactiver mod_http2 (recommandée)
C’est la mitigation la plus simple et la moins impactante. La désactivation de HTTP/2 ne supprime pas HTTPS et n’affecte pas significativement les performances dans la majorité des configurations.
# Désactiver le module HTTP/2
sudo a2dismod http2
# Rechercher les directives Protocols actives
grep -r "Protocols.*h2" /etc/apache2/
# Retirer h2 des directives Protocols dans les vhosts
sudo sed -i 's/Protocols h2 http/1.1/Protocols http/1.1/g' /etc/apache2/sites-enabled/*.conf
# Tester la configuration avant rechargement
sudo apache2ctl configtest && sudo systemctl reload apache2
# Vérifier que le module n'est plus chargé
apache2ctl -M | grep http2
Option 2 : Passer en MPM Prefork
Cette option change fondamentalement le modèle de traitement des requêtes et peut dégrader les performances sous forte charge. Elle n’est recommandée que si HTTP/2 doit impérativement rester actif pour des raisons fonctionnelles.
# Désactiver les MPM multi-threadés
sudo a2dismod mpm_event
sudo a2dismod mpm_worker
# Activer MPM Prefork
sudo a2enmod mpm_prefork
# Redémarrer Apache
sudo systemctl restart apache2
# Vérifier le MPM actif
apache2ctl -M | grep mpm
Vérifications post-correctif
Après application du correctif ou des mitigations, effectuez les vérifications suivantes pour vous assurer que le serveur est sécurisé et opérationnel :
# Vérifier la version Apache
apache2 -v
# Vérifier l'état du service
sudo systemctl status apache2
# Contrôler les modules actifs
apache2ctl -M | grep -E "http2|mpm"
# Tester la validité de la configuration
sudo apache2ctl configtest
# Consulter les logs pour détecter des anomalies
sudo journalctl -u apache2 --since "1 hour ago"
Pour tester depuis un client externe si HTTP/2 est effectivement désactivé :
curl -I --http2 https://votre-domaine.example.com 2>&1 | grep -i "HTTP/"
Une réponse HTTP/1.1 confirme que la mitigation par désactivation de HTTP/2 est effective. Si vous avez conservé HTTP/2 après passage en MPM prefork, la réponse restera HTTP/2 — ce qui est attendu dans ce cas.
À lire également
- Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu — Gérer plusieurs versions de PHP sur Apache dans un environnement multi-virtualhost.
- Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx — Renforcer l’isolation et la sécurité des pools PHP-FPM sur Apache.
- nftables en pratique — remplacer iptables sur Debian/Ubuntu — Mettre en place un pare-feu moderne pour limiter l’exposition de votre serveur.
- Gestion des services avec systemd sur Debian et Ubuntu — Maîtriser le redémarrage et la supervision des services Apache avec systemctl.