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

Risques

Déni de service (à distance)

Exploitation

La vulnérabilité exploitée est du type
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