HAProxy - CVE-2026-90678

Date de publication :

Il s'agit d'une vulnérabilité de désynchronisation de requêtes dans le multiplexeur HTTP/3 de HAProxy, lorsqu'il transmet du trafic vers un serveur applicatif en HTTP/1.1 avec un encodage chunked sur une connexion réutilisée.

HAProxy est un logiciel open source de répartition de charge et de proxy inverse pour les applications TCP et HTTP. Il gère l'équilibrage de charge, la terminaison TLS et le routage du trafic entre des serveurs frontaux et des serveurs applicatifs en arrière-plan.

Lorsqu'une requête HTTP/3 ne comporte pas d'en-tête Content-Length, le multiplexeur crédite la longueur annoncée dans l'en-tête d'une trame DATA à l'estimation de charge utile du flux dès le décodage de cette trame, avant même la réception effective des données. Cette longueur déclarée est ensuite retranscrite telle quelle comme taille de chunk HTTP/1.1. Un client distant peut déclarer une charge utile plus importante que celle réellement envoyée puis clore prématurément le flux. HAProxy annonce alors un chunk plus grand que les octets réellement transmis et replace la connexion dans le pool en état désynchronisé. La requête suivante traitée sur cette même connexion réutilisée peut ainsi contourner les règles d'analyse HTTP du frontal, comme une règle http-request deny, et consommer la ligne de requête et l'en-tête Authorization d'un client légitime concurrent au sein du corps de la requête de l'attaquant. L'exploitation repose sur une condition de concurrence non déterministe avec le pool de connexions, mais reste rejouable à volonté.

Elle permet le contournement des règles de sécurité du frontal et la corruption de requêtes de clients légitimes sur la connexion réutilisée.

Informations

La faille est activement exploitée : Non

Un correctif existe : Oui

Une mesure de contournement existe : Oui

Risques

•   Contournement de la politique de sécurité
•   Atteinte à l'intégrité des données
•   Déni de service (à distance)

Exploitation

La vulnérabilité exploitée est du type
CWE-130 : Improper Handling of Length Parameter Inconsistency

Détails sur l'exploitation
•   Vecteur d'attaque : Réseau
•   Complexité de l'attaque : Élevée
•   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.3.0 jusqu'à 3.3.14 incluse
•   HAProxy versions 3.4.0 jusqu'à 3.4.4 incluse
•   HAProxy versions 3.5-dev1 jusqu'à 3.5-dev5 incluse

Contournement provisoire

•   Retirer les écouteurs (bind) QUIC de l'ensemble des frontends afin de supprimer l'exposition à ce vecteur HTTP/3.
•   Désactiver le support QUIC/HTTP/3 s'il n'est pas requis en production.

Solutions ou recommandations

•   HAProxy versions 3.5-dev6 et supérieures (branche de développement, point de correction d'origine confirmé par le dépôt amont).
•   Rétroportage vers les branches stables 3.3.x et 3.4.x annoncé par l'auteur du correctif dans le message de commit, sans numéro de version de patch stable communiqué à ce jour dans les sources consultées.