HAProxy - CVE-2026-110354
Date de publication :
Il s’agit d’une vulnérabilité dans l’analyseur HTTP/1 (multiplexeur H1) de HAProxy.
HAProxy est un répartiteur de charge et un proxy inverse open source pour les protocoles TCP et HTTP. Il distribue le trafic entre plusieurs serveurs et assure la terminaison TLS. HAProxy Technologies propose aussi une édition Enterprise et un contrôleur d’ingress Kubernetes.
Une requête HTTP/1.1 en transfert chunked dont la ligne de taille de chunk est trop longue n’est pas rejetée. Le multiplexeur draine la requête avant de fermer le flux. L’analyseur retraite alors sans cesse les mêmes octets sans progresser. Le thread worker reste à 100 % de CPU après l’expiration des timeouts et après la déconnexion du client.
Elle permet à un attaquant distant non authentifié de provoquer un déni de service à distance par épuisement du CPU de tous les threads, jusqu’au redémarrage du processus.
Informations
La faille est activement exploitée : Non
Un correctif existe : Oui
Une mesure de contournement existe : Non
Déni de service (à distance)
Exploitation
CWE-835 : Loop with Unreachable Exit Condition ('Infinite Loop')
Détails sur l'exploitation
• Vecteur d'attaque : Réseau
• Complexité de l'attaque : Faible
• Privilèges nécessaires pour réaliser l'attaque : Aucun
• Interaction d'un utilisateur ayant accès au produit est-elle nécessaire : Non
• L'exploitation de la faille permet d'obtenir des droits privilégiés : Non
Preuve de concept
Actuellement, aucune preuve de concept n'est disponible en sources ouvertes.
Systèmes ou composants affectés
- HAProxy versions 3.0.0 jusqu’à 3.0.29, soit antérieures à 3.0.30
- HAProxy versions 3.2.0 antérieures à 3.2.26
- HAProxy versions 3.3.0 antérieures à 3.3.17
- HAProxy versions 3.4.0 antérieures à 3.4.7
- HAProxy versions 3.5-dev antérieures à 3.5-dev9
- HAProxy Enterprise Edition versions 3.0r1 antérieures à 3.0r1-362.1441
- HAProxy Enterprise Edition versions 3.2r1 antérieures à 3.2r1-378.1259
- HAProxy Enterprise Edition versions 3.3r1 antérieures à 3.3r1-377.1005
- HAProxy Kubernetes Ingress Controller versions 3.2.0 antérieures à 3.2.17
- HAProxy Kubernetes Ingress Controller Enterprise versions 3.2.0 antérieures à 3.2.17-ee1
- HAProxy Kubernetes Ingress Controller Enterprise versions 3.0 antérieures à 3.0.16-ee17
- HAProxy Kubernetes Ingress Controller Enterprise versions 1.11 antérieures à 1.11.14-ee11
Contournement provisoire
Rejeter les requêtes chunked avec la règle : http-request reject if { req.hdr(transfer-encoding) -i chunked }
Solutions ou recommandations
- HAProxy versions 3.0.0 jusqu’à 3.0.29, soit antérieures à 3.0.30
- HAProxy versions 3.2.0 antérieures à 3.2.26
- HAProxy versions 3.3.0 antérieures à 3.3.17
- HAProxy versions 3.4.0 antérieures à 3.4.7
- HAProxy versions 3.5-dev antérieures à 3.5-dev9
- HAProxy Enterprise Edition versions 3.0r1 antérieures à 3.0r1-362.1441
- HAProxy Enterprise Edition versions 3.2r1 antérieures à 3.2r1-378.1259
- HAProxy Enterprise Edition versions 3.3r1 antérieures à 3.3r1-377.1005
- HAProxy Kubernetes Ingress Controller versions 3.2.0 antérieures à 3.2.17
- HAProxy Kubernetes Ingress Controller Enterprise versions 3.2.0 antérieures à 3.2.17-ee1
- HAProxy Kubernetes Ingress Controller Enterprise versions 3.0 antérieures à 3.0.16-ee17
- HAProxy Kubernetes Ingress Controller Enterprise versions 1.11 antérieures à 1.11.14-ee11