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:

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


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
