Schwachstellen im Pingora-Projekt, die das Eindringen in externe Anfragen ermöglichen

Die Firma Cloudflare hat die Behebung von drei Schwachstellen im Framework Pingora bekannt gegeben, von denen zwei eine kritische Gefahrenstufe (9,3 von 10) erhalten haben. Das Framework Pingora ist in der Programmiersprache Rust geschrieben und dient der Entwicklung sicherer, hochperformanter Netzwerkdienste. Ein mit Pingora erstellter Proxy wird im Content Delivery Network von Cloudflare verwendet und verarbeitet über 40 Millionen Anfragen pro Sekunde. Die Schwachstellen wurden in der Version Pingora 0.8.0 behoben.

Die beiden gefährlichsten Schwachstellen ermöglichen Angriffe der Klasse „HTTP Request Smuggling“, die es erlauben, Zugangsbeschränkungen zu umgehen und sich in die Inhalte anderer Benutzeranfragen einzuschleichen, die im gleichen Datenstrom zwischen Frontend und Backend verarbeitet werden (zum Beispiel zur Injektion von schädlichem JavaScript-Code in die Sitzung eines anderen Benutzers auf der Website). Die Probleme wurden von einem Teilnehmer des Bug-Bounty-Programms identifiziert, das Belohnungen für die Entdeckung von Schwachstellen vorsieht.

In einem Setup mit Backend-Zugriff über einen Reverse-Proxy nimmt ein zusätzliches Element die Anfragen der Clients entgegen, das eine langanhaltende TCP-Verbindung zum Backend aufbaut, das die Anfragen direkt verarbeitet. Über diese gemeinsame Verbindung werden normalerweise die Anfragen verschiedener Benutzer übertragen, die der Reihe nach in einer Kette erfolgen, getrennt durch den HTTP-Protokoll-Mechanismus. Angriffe der Klasse HTTP Request Smuggling entstehen durch unterschiedliche Interpretationen der HTTP-Header und -Spezifikationen zwischen Frontends und Backends, zum Beispiel wenn das Frontend den HTTP-Header „Content-Length“ zur Bestimmung der Anforderungsgröße verwendet, während das Backend „Transfer-Encoding: chunked“ nutzt.

Die erste Schwachstelle CVE-2026-2835 ist im Code der HTTP/1.0-Abfragen vorhanden und wird durch die fehlerhafte Verarbeitung des Headers „Transfer-Encoding“ mit mehreren Werten verursacht, sowie durch die Verwendung des Verbindungsschlusses als Zeichen für das Ende des Anfragekörpers (close-delimited). Pingora überprüfte nur die Variante „Transfer-Encoding: chunked“ und ignorierte diesen Header, wenn mehrere Werte angegeben waren. In dieser Situation berücksichtigte Pingora die Größe im Header „Content-Length“ nicht und betrachtete alle Daten, die bis zum Schließen der Verbindung empfangen wurden, als Anfragekörper.

Durch die Angabe mehrerer Werte im Header „Transfer-Encoding“ konnte der Angreifer Bedingungen schaffen, unter denen die Anfrage an das Backend umgeleitet wurde, deren tatsächliche Größe nicht mit der Größe der chunked-Kette übereinstimmte, die basierend auf dem Header „Transfer-Encoding“ berechnet wurde. Pingora leitete alle empfangenen Daten als eine Anfrage weiter, während das Backend, zum Beispiel Node.js, die Anfrage basierend auf „Transfer-Encoding: chunked“ berechnete und den restlichen Teil als Beginn einer anderen Anfrage behandelte. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

Schwachstellen im Pingora-Projekt, die das Eindringen in externe Anfragen ermöglichen

Die zweite Schwachstelle CVE-2026-2833 resultiert aus der fehlerhaften Verarbeitung des HTTP-Headers „Upgrade“ in HTTP/1.1-Anfragen. Bei Vorhandensein des Headers „Upgrade“ in der Anfrage leitete der Proxy die restlichen Daten der Anfrage, die dem Header „Upgrade“ folgten, ohne auf die Antwort des Backends mit dem Code 101 (Switching Protocols) zu warten, direkt an das Backend weiter. Dadurch wurde die Synchronisierung des Streams zwischen dem Proxy und dem Backend gestört, und das Backend betrachtete die Daten, die nach dem Header „Upgrade“ gesendet wurden, als separate Anfrage und sendete das Ergebnis dieser Anfrage als Antwort auf die darauf folgende Anfrage eines anderen Benutzers. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com

Schwachstellen im Pingora-Projekt, die das Eindringen in externe Anfragen ermöglichen
Schwachstellen im Pingora-Projekt, die das Eindringen in externe Anfragen ermöglichen

Die Probleme treten auf, wenn Pingora in der Form eines Reverse Proxys (Ingress-Proxy) verwendet wird, der Benutzeranfragen an Backends unter Verwendung der Protokolle HTTP/1.0 oder HTTP/1.1 weiterleitet. Die in dem Content Delivery Network Cloudflare verwendete Konfiguration von Pingora erlaubte es nicht, die Schwachstellen auszunutzen, da Pingora im CDN nicht als Ingress-Proxy verwendet wird, Anfragen nur über das Protokoll HTTP/1.1 weiterleitet, Anfragen mit ungültigen Werten für Content-Length blockiert, nur einen Wert des Headers „Transfer-Encoding: chunked“ weiterleitet und in Anfragen mit dem Header „Upgrade:“ den zusätzlichen Header „Connection: close“ einfügt, der es nicht ermöglicht, zusätzliche Anfragen über dieselbe Verbindung zu übertragen.

Die dritte Verwundbarkeit CVE-2026-2836 (Schweregrad 8,4 von 10) führt zu Cache-Vergiftung (Cache Poisoning), da der Cache-Datenplatzierungsschlüssel (CacheKey) nur auf Grundlage des URI-Pfades generiert wird, wobei der Inhalt des „Host“-Headers ignoriert wird. Dieses Versäumnis führt zur Bildung identischer Cache-Schlüssel für identische HTTP-Pfade zu verschiedenen Hosts. Diese Schwachstelle kann genutzt werden, um den Cache-Inhalt zu ersetzen, wenn der Cache-Modus für mehrere Hosts verwendet wird. In Pingora ist Caching eine experimentelle Funktion, die für den produktiven Einsatz nicht empfohlen wird.

Quelle: opennet.ru

60GB SSD 8Gb DDR4