Une nouvelle recherche menée par l'expert en sécurité Bartek Nowotarski a mis au jour une vulnérabilité potentielle dans le protocole HTTP/2.. Connu sous le nom d'inondation de CONTINUATION, cet exploit permet aux attaquants de mener déni de service (DoS) attaques en inondant un serveur de trames CONTINUATION.
La vulnérabilité aux inondations CONTINUATION expliquée
Le problème réside dans la façon dont les implémentations HTTP/2 gèrent les trames CONTINUATION au sein d'un seul flux.. De nombreuses implémentations ne parviennent pas à limiter ou à nettoyer correctement le nombre de trames CONTINUATION envoyées., permettre aux attaquants de submerger un serveur avec un flux de trames pouvant provoquer un épuisement de la mémoire ou des plantages.
HTTP/2, comme son prédécesseur HTTP/1, utilise les champs d'en-tête dans les demandes et les réponses. Ces en-têtes sont sérialisés en blocs d'en-tête, qui sont ensuite transmis sous forme de fragments de blocs dans les trames CONTINUATION.
Comment exploiter la vulnérabilité
Les attaquants peuvent exploiter cette vulnérabilité en envoyant un flux continu de trames CONTINUATION sans l'indicateur END_HEADERS défini., obligeant le serveur à analyser et à stocker une quantité excessive de données d'en-tête en mémoire.
Cette vulnérabilité constitue une menace sérieuse, car une seule machine ou une connexion TCP peut perturber la disponibilité du serveur, entraînant des plantages ou une dégradation des performances. L'attaque peut ne pas être visible dans les journaux d'accès HTTP, rendre la détection difficile.
Implémentations concernées
Plusieurs implémentations HTTP/2 sont concernées, y compris des projets comme Apache HTTP Server, Node.js, et Golang. Il est conseillé aux utilisateurs de mettre à niveau les logiciels concernés pour atténuer les risques. Si un correctif n'est pas disponible, la désactivation temporaire de HTTP/2 peut fournir une protection contre cet exploit.
Voici plusieurs listes CVE mettant en évidence la vulnérabilité dans diverses implémentations, selon le Centre de Coordination du CERT consultatif.
CVE-2024-27983
Un attaquant peut rendre le serveur HTTP/2 Node.js indisponible en envoyant une quantité limitée de paquets de trames HTTP/2 contenant quelques trames HTTP/2.. La faille peut laisser des données dans nghttp2 mémoire après une réinitialisation. Cela peut se produire lorsque des en-têtes avec des trames HTTP/2 CONTINUATION sont envoyés au serveur et que la connexion TCP est brusquement fermée par le client., déclencher le destructeur Http2Session pendant que les trames d'en-tête sont encore en cours de traitement, provoquant une condition de concurrence.
CVE-2024-27919
Envoyé oghttp le codec ne parvient pas à réinitialiser une requête lorsque les limites de la carte d'en-tête sont dépassées. Cela permet à un attaquant d'envoyer une séquence de trames CONTINUATION sans que le bit END_HEADERS soit défini., conduisant à une consommation de mémoire illimitée.
CVE-2024-2758
Les limites de débit Tempesta FW ne sont pas activées par défaut. Ils sont soit trop grands pour capturer les attaques de trames de CONTINUATION vides, soit trop petits pour gérer correctement les requêtes HTTP normales..
CVE-2024-2653
amphp/http collecte les trames HTTP/2 CONTINUATION dans un tampon illimité et ne vérifie pas la limite de taille d'en-tête avant de recevoir l'indicateur END_HEADERS, entraînant un manque de mémoire (MOO) crash. amphp/client http et amphp/serveur http sont indirectement affectés s'ils sont utilisés avec une version non corrigée d'ampp/http. Versions antérieures d'amphp/http-client avec prise en charge HTTP/2 (v4.0.0-rc10 à 4.0.0) sont également directement concernés.
CVE-2023-45288
Les forfaits Go net/http et net/http2 ne pas limiter le nombre de trames CONTINUATION lues pour une requête HTTP/2, permettre à un attaquant de fournir un ensemble d'en-têtes excessivement grand pour une seule requête, conduisant à une consommation excessive du processeur.
CVE-2024-28182
Une implémentation utilisant le nghttp2 la bibliothèque continuera à recevoir des trames CONTINUATION et ne rappellera pas l'application pour permettre la visibilité de ces informations avant de réinitialiser le flux, résultant en un Déni de service (DoS) vulnérabilité.
CVE-2024-27316
Les trames HTTP/2 CONTINUATION sans l'indicateur END_HEADERS peuvent être envoyées en continu par un attaquant à une implémentation Apache Httpd., qui ne parvient pas à mettre fin à la demande plus tôt.
CVE-2024-31309
Une attaque DoS HTTP/2 CONTINUATION peut amener Apache Traffic Server à consommer plus de ressources sur le serveur.. Versions de 8.0.0 par 8.1.9 et de 9.0.0 par 9.2.3 sont affectés.
CVE-2024-30255
La pile de protocole HTTP/2 dans les versions Envoy 1.29.2 ou version antérieure est vulnérable à l'épuisement du processeur en raison d'un flot de trames CONTINUATION. Le codec HTTP/2 d'Envoy permet au client d'envoyer un nombre illimité de trames CONTINUATION, même après avoir dépassé les limites de la carte d'en-tête d'Envoy. Cela permet à un attaquant d'envoyer une séquence de trames CONTINUATION sans que le bit END_HEADERS soit défini., ce qui entraîne une utilisation du processeur consommant environ 1 cœur pour 300 Mbit/s de trafic.