VulnĂ©rabilitĂ©s dans le projet Pingora permettant d'intercepter les requĂȘtes externes

L'entreprise Cloudflare a annoncĂ© avoir corrigĂ© trois vulnĂ©rabilitĂ©s dans le cadre de Pingora, dont deux ont Ă©tĂ© classĂ©es comme critiques (9,3 sur 10). Le cadre Pingora est Ă©crit en Rust et est destinĂ© Ă  dĂ©velopper des services rĂ©seau sĂ©curisĂ©s et hautes performances. Le proxy construit avec Pingora est utilisĂ© dans le rĂ©seau de distribution de contenu de Cloudflare et traite plus de 40 millions de requĂȘtes par seconde. Les vulnĂ©rabilitĂ©s ont Ă©tĂ© corrigĂ©es dans la version Pingora 0.8.0.

Les deux vulnĂ©rabilitĂ©s les plus prĂ©occupantes permettent des attaques de type « HTTP Request Smuggling », qui contournent les systĂšmes de restriction d'accĂšs et s'immiscent dans le contenu des requĂȘtes d'autres utilisateurs qui sont traitĂ©es dans le mĂȘme flux entre le front-end et le back-end (par exemple, pour insĂ©rer un code JavaScript malveillant dans la session d'un autre utilisateur sur le site). Ces problĂšmes ont Ă©tĂ© dĂ©couverts par un participant au programme Bug Bounty, qui prĂ©voit une rĂ©compense pour la dĂ©couverte de vulnĂ©rabilitĂ©s.

Dans un schĂ©ma oĂč les appels au back-end passent par un proxy inverse, les requĂȘtes des clients sont acceptĂ©es par un nƓud supplĂ©mentaire, qui Ă©tablit une connexion TCP persistante avec le back-end, qui traite directement les requĂȘtes. C’est par cette connexion commune que sont gĂ©nĂ©ralement transmises les requĂȘtes de diffĂ©rents utilisateurs, qui s’enchaĂźnent les unes aprĂšs les autres en utilisant des moyens du protocole HTTP. Les attaques de type HTTP Request Smuggling surviennent en raison d'interprĂ©tations diffĂ©rentes des en-tĂȘtes HTTP et des spĂ©cifications du protocole HTTP entre les front-ends et les back-ends, par exemple, lorsque le front-end utilise l'en-tĂȘte HTTP « Content-Length » pour dĂ©terminer la taille de la requĂȘte, tandis que le back-end utilise « Transfer-Encoding: chunked ».

La premiĂšre vulnĂ©rabilitĂ© CVE-2026-2835 est prĂ©sente dans le code d'analyse des requĂȘtes HTTP/1.0 et est causĂ©e par un traitement incorrect de l'en-tĂȘte « Transfer-Encoding » avec plusieurs valeurs, ainsi que par l'utilisation de la fermeture de la connexion comme indication de la fin du corps de la requĂȘte (close-delimited). Pingora vĂ©rifiait uniquement la variante « Transfer-Encoding: chunked » et ignorait cet en-tĂȘte s'il contenait plusieurs valeurs. Dans cette situation, Pingora ne tenait pas compte de la taille dans l'en-tĂȘte « Content-Length », considĂ©rant comme corps de la requĂȘte toutes les donnĂ©es reçues avant la fermeture de la connexion.

En spĂ©cifiant plusieurs valeurs dans l'en-tĂȘte « Transfer-Encoding », l'attaquant pouvait crĂ©er des conditions dans lesquelles la demande Ă©tait redirigĂ©e vers le backend, dont la taille rĂ©elle ne correspondait pas Ă  la taille de la chaĂźne chunked, calculĂ©e sur la base de l'en-tĂȘte « Transfer-Encoding. Pingora redirigeait toutes les donnĂ©es reçues en une seule demande, tandis que le backend, comme Node.js, calculait la demande en fonction de « Transfer-Encoding: chunked » et traitait le reste comme le dĂ©but d'une autre demande. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

VulnĂ©rabilitĂ©s dans le projet Pingora permettant d'intercepter les requĂȘtes externes

La seconde vulnĂ©rabilitĂ© CVE-2026-2833 est causĂ©e par un traitement incorrect de l'en-tĂȘte HTTP « Upgrade » dans les requĂȘtes HTTP/1.1. Lorsqu'un en-tĂȘte « Upgrade » Ă©tait prĂ©sent dans la demande, le proxy le transmettait immĂ©diatement au backend, ainsi que les autres donnĂ©es de la demande suivant l'en-tĂȘte « Upgrade », sans attendre de rĂ©ponse du backend avec le code 101 (Switching Protocols). En raison de cela, la synchronisation du flux entre le proxy et le backend Ă©tait perturbĂ©e et le backend considĂ©rait les donnĂ©es envoyĂ©es aprĂšs l'en-tĂȘte « Upgrade » comme une demande distincte, renvoyant le rĂ©sultat de l'exĂ©cution de cette demande en rĂ©ponse Ă  la demande suivante d'un autre utilisateur. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com

VulnĂ©rabilitĂ©s dans le projet Pingora permettant d'intercepter les requĂȘtes externes
VulnĂ©rabilitĂ©s dans le projet Pingora permettant d'intercepter les requĂȘtes externes

Les problĂšmes se manifestent lors de l'utilisation de Pingora sous la forme d'un proxy inverse (ingress proxy), transmettant les demandes des utilisateurs aux backends en utilisant les protocoles HTTP/1.0 ou HTTP/1.1. La configuration utilisĂ©e dans le rĂ©seau de distribution de contenu Cloudflare ne permettait pas d'exploiter les vulnĂ©rabilitĂ©s, car Pingora dans le CDN n'est pas utilisĂ© comme ingress proxy, redirigeant les demandes uniquement en utilisant le protocole HTTP/1.1, bloquant les demandes avec des valeurs Content-Length incorrectes, redirigeant uniquement une valeur de l'en-tĂȘte « Transfer-Encoding: chunked » et ajoutant dans les demandes avec l'en-tĂȘte « Upgrade: » un en-tĂȘte additionnel « Connection: close », empĂȘchant l'envoi de demandes supplĂ©mentaires dans la mĂȘme connexion.

La troisiĂšme vulnĂ©rabilitĂ© CVE-2026-2836 (niveau de danger 8.4 sur 10) conduit Ă  une contamination du cache (cache poisoning) en raison de la gĂ©nĂ©ration de la clĂ© de mise en cache (CacheKey) uniquement sur la base du chemin URI, en ignorant le contenu de l'en-tĂȘte « Host ». Un tel dĂ©faut entraĂźne la crĂ©ation de clĂ©s de mise en cache identiques pour des chemins HTTP identiques vers diffĂ©rents hĂŽtes. Cette vulnĂ©rabilitĂ© peut ĂȘtre exploitĂ©e pour remplacer le contenu du cache lors de l'utilisation du mode de mise en cache pour plusieurs hĂŽtes. Dans Pingora, la mise en cache est une fonctionnalitĂ© expĂ©rimentale, non recommandĂ©e pour les dĂ©ploiements en production.

Source : opennet.ru

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster