Skip to content
Rejoignez Censys le 10 septembre 2024 pour notre atelier sur la chasse aux menaces à San Francisco, CA | Inscrivez-vous maintenant
Blogs

HTTP/Qui ? CVE-2023-44487

Résumé

  • Google et Cloudflare ont récemment publié des rapports faisant état d'une nouvelle attaque par déni de service baptisée "Rapid Reset", qui exploite la fonctionnalité d'annulation de flux de HTTP/2.
  • Cette technique permet aux acteurs de s'engager dans un schéma "demande, annulation" à grande échelle pour produire des attaques par déni de service en très grand nombre. Les serveurs utilisant HTTP/2 qui envoient le trafic par proxy vers des serveurs dorsaux sont particulièrement sensibles à cette attaque.
  • Plus de 555 millions d'hôtes sur Internet semblent actuellement avoir la capacité d'exécuter HTTP/2 et peuvent donc être vulnérables à cette attaque.
  • Bien qu'il n'existe actuellement aucune solution de contournement pour ce problème, les administrateurs disposant de serveurs compatibles HTTP/2 qui envoient des requêtes par proxy à un serveur dorsal peuvent désactiver temporairement HTTP/2 sur le serveur frontal jusqu'à ce que les vendeurs aient créé une solution de contournement.

Regarder de plus près les mécanismes d'attaque

Le 10 octobre, Google et Cloudflare ont publié des rapports concernant l'utilisation abusive d'une fonctionnalité spécifique du protocole HTTP/2, entraînant une augmentation de la charge et un risque de déni de service sur les serveurs qui ne peuvent pas répondre à un grand nombre de requêtes simultanées.

Leurs rapports décrivent en détail un scénario dans lequel un acteur peut contourner les restrictions mises en place pour limiter le nombre de demandes simultanées qui arrivent sur un serveur HTTP/2 (pour chaque client) en annulant une demande juste après qu'elle a été faite, réinitialisant ainsi le compteur de demandes interne pour chaque demande d'annulation. Cela signifie que l'acteur peut alors spammer à l'infini de nouvelles demandes au serveur sans atteindre ces limites.

Un serveur web bien optimisé où le service HTTP/2 est en interface directe avec le client et où aucune donnée externe n'est récupérée via la logique métier (c'est-à-dire un serveur qui ne transfère pas les requêtes à un autre serveur ou qui ne les transmet pas par proxy) verra certainement une certaine augmentation de l'utilisation, mais rien que le serveur ne soit pas en mesure de gérer. Le problème devient plus évident lorsque le serveur HTTP/2 tente d'acheminer chaque demande par proxy via une connexion réseau (comme un serveur Nginx acheminant des connexions par proxy vers un service API fonctionnant sur Apache).

Dans ce scénario, les données de la requête doivent être mises en mémoire tampon par le proxy, puis envoyées à un service backend ; ce service backend doit ensuite traiter ces données et renvoyer la réponse au serveur HTTP/2. Pendant ce temps, en attendant ces réponses proxy, plusieurs zones du processus en cours peuvent utiliser de la mémoire et des ressources qui n'ont pas encore été nettoyées.

En bref, un client envoie une requête HTTP/2 valide, le serveur HTTP/2 analyse cette requête, l'envoie à un serveur dorsal et attend une réponse. Cependant, le client annule immédiatement cette demande, de sorte que le serveur HTTP2 doit également annuler la demande au serveur dorsal, mais à ce moment-là, les données et les ressources ont déjà été allouées et utilisées. Et comme le compteur de requêtes maximales est continuellement remis à zéro, un nombre infini de requêtes peuvent arriver sans que rien ne les arrête.

C'est le blog de Google qui en parle le mieux :

"...le client peut ouvrir 100 flux et envoyer une requête sur chacun d'entre eux en un seul aller-retour ; le mandataire lira et traitera chaque flux en série, mais les requêtes adressées aux serveurs dorsaux peuvent à nouveau être parallélisées. Le client peut alors ouvrir de nouveaux flux au fur et à mesure qu'il reçoit des réponses aux flux précédents. Cela donne un débit effectif pour une seule connexion de 100 demandes par aller-retour, avec des constantes de temps similaires à celles des demandes HTTP/1.1. Cela conduit généralement à une utilisation presque 100 fois plus élevée de chaque connexion."

Baptisée à juste titre HTTP/2 "Rapid Reset Attack" (basée sur le fait que les clients réinitialisent chaque requête sortante), les méthodes décrites affectent techniquement toute implémentation de HTTP/2, ce qui signifie qu'il ne s'agit pas d'une faiblesse spécifique à un fournisseur ou à un produit, mais d'une faiblesse dans le protocole lui-même. Et tout produit qui supporte HTTP/2 (actuellement) est susceptible de subir cette attaque.

En bref, cette attaque exerce une forte pression entre les serveurs frontaux et les serveurs dorsaux avec lesquels ils communiquent, comme dans les environnements fortement proxifiés. C'est la raison pour laquelle la plupart des rapports sur cette attaque proviennent de fournisseurs de services qui s'occupent beaucoup d'équilibrage de charge et de proxys HTTP, comme Cloudflare et Google.

Ce que voit Censys

Censys peut déterminer si un service HTTP peut accepter et traiter des requêtes HTTP/2 entrantes, mais ne dispose d'aucune information supplémentaire sur l'implémentation sous-jacente en dehors de ce que les serveurs HTTP nous indiquent comme étant en cours d'exécution (par exemple, un en-tête de serveur qui nous indique qu'il s'agit d'Apache ou de Nginx). Il n'existe pas de correctifs concrets ou de solutions de contournement à l'heure où nous écrivons ces lignes. Si nous devions deviner, il ne s'agirait pas d'un changement dans le protocole sous-jacent mais d'une solution de contournement dans les implémentations du protocole elles-mêmes. Dans les deux cas, les implémentations du protocole HTTP/2 seront modifiées et les propriétaires d'hôtes devront mettre à jour leurs serveurs.

Étant donné que le protocole HTTP2 ne comporte pas de version ou d'identification sémantique spécifique, même si une solution de contournement ou un correctif est mis en place, Censys sera toujours en mesure d'identifier si le protocole HTTP/2 est pris en charge ou non.

Au 10 octobre 2023, Censys a observé 556,3 millions d'hôtes utilisant 719,8 millions de serveurs HTTP/2. Il convient de noter que ce chiffre inclut les serveurs HTTP ayant la possibilité de passer à HTTP/2, mais pas nécessairement tous ceux qui l'exécutent actuellement.

Les 10 premiers systèmes autonomes 

ASN Système autonome Nombre d'hôtes Nombre de services
16509 AMAZON-02 73.4M 85.4M
46606 COUCHE UNIFIÉE-AS-1 29.2M 57.5M
63949 AKAMAI-LINODE-AP Cloud connecté d'Akamai 25.8M 45.7M
13335 CLOUDFLARENET 39.8M 40.3M
53831 SQUARESPACE 33.7M 33.7M
14618 AMAZON-AES 23.6M 26.1M
24940 HETZNER-AS 14.2M 19.6M
19871 SOLUTIONS-RÉSEAU-HÉBERGEMENT 9.1M 17.8M
16276 OVH 10.7M 15.9M
47846 SEDO-AS 13.7M 13.7M

 

Les 10 premiers pays

Pays Nombre d'hôtes Nombre de services
États-Unis 295.5M 391.1M
Allemagne 53.2M 60.9M
Chine 19.6M 29.5M
France 13.7M 19.7M
Pays-Bas 13.6M 18.8M
Canada 16.9M 18.5M
Royaume-Uni 10.7M 13.9M
Russie 12.7M 13.5M
Singapour 7.3M 9.3M
Japon 8.3M 9.0M

Pour trouver les hôtes et les services qui exécutent HTTP/2, nous pouvons utiliser les requêtes suivantes :

Recherche Censy

Censys Plate-forme EM

  • web_entity.instances.http.supports_http2 : "true"

Que peut-on faire ?

  • Évaluez l'étendue de l'exposition de votre serveur HTTP/2 et réduisez votre surface d'exposition. Si vous disposez d'un serveur compatible HTTP/2 qui transmet les requêtes à un serveur dorsal, une solution possible consiste à désactiver temporairement HTTP/2 sur le serveur frontal jusqu'à ce que les fournisseurs aient trouvé une solution de contournement.
  • Parmi les contre-mesures efficaces signalées par les services en nuage concernés, on peut citer la combinaison :
    • Utiliser les méthodes et les services existants de protection contre les attaques DDoS.
    • Appliquer d'autres correctifs logiciels susceptibles de rendre vos serveurs web compatibles HTTP/2 plus résilients.

A propos de l'auteur

L'équipe de recherche Censys
Solutions de gestion de la surface d'attaque
En savoir plus