Sicherheitslücke in cdnjs, die die Codeausführung auf Cloudflare-Servern ermöglichte

Im Content-Delivery-Netzwerk cdnjs von Cloudflare wurde eine kritische Schwachstelle entdeckt, die darauf ausgelegt ist, die Bereitstellung von JavaScript-Bibliotheken zu beschleunigen und die Ausführung willkürlichen Codes auf CDN-Servern zu ermöglichen. Die Gefahr des Problems wird durch die Tatsache verschärft, dass etwa 12.7 % aller Websites im Internet den Dienst zum Herunterladen von JavaScript-Bibliotheken nutzen und eine Kompromittierung der Infrastruktur es ermöglicht, die von diesen Websites bereitgestellten Bibliotheken zu ersetzen.

Der cdnjs-Dienst lädt Pakete von Git oder einem NPM-Repository herunter und ermöglicht anschließend jeder Website die kostenlose Nutzung des Cloudflare-Content-Delivery-Netzwerks, um das Laden von JavaScript-Bibliotheken zu beschleunigen. Bei der Untersuchung des Codes der auf GitHub veröffentlichten cdnjs-Komponenten wurde festgestellt, dass zum Entpacken von NPM-Paketen in tgz-Archiven das Standardmodul archive/tar in der Go-Sprache verwendet wird, das eine Liste der Dateien im Originalzustand erstellt, ohne die Pfade zu normalisieren . Wenn das Skript den Inhalt basierend auf der angegebenen Liste entpackt, kann das Vorhandensein von Dateien wie „../../../../../../../tmp/test“ im Archiv angezeigt werden dazu führen, dass beliebige Dateien im System überschrieben werden, sofern die Zugriffsrechte dies zulassen.

Es wurde vorgeschlagen, dass ein Angreifer beantragen könnte, seine Bibliothek zu cdnjs hinzuzufügen und ein speziell entwickeltes Archiv hochzuladen, das Dateien mit „../“-Zeichen im Pfad zum NPM-Repository enthält. Auf cdnjs-Servern wird regelmäßig ein „Autoupdate“-Vorgang durchgeführt, bei dem der Handler neue Versionen der vorgeschlagenen Bibliothek herunterlädt und den Inhalt entpackt. Mithilfe von Dateien mit dem Pfad „../“ kann ein Angreifer Dateien mit Dienstskripten überschreiben und deren Code auf dem Server ausführen, auf dem das Entpacken durchgeführt wurde.

Beim Herunterladen von Updates von Git wurde festgestellt, dass der Handler, der die Updates herunterlädt, beim Kopieren von Dateien von Git keine symbolischen Links berücksichtigte. Diese Funktion ermöglichte es, das Lesen beliebiger Dateien vom Server zu organisieren, indem symbolische Links zu Git hinzugefügt wurden.

Es wurde beschlossen, Experimente mit einer Demonstration des Hackens von CDNJS zu beginnen, um einen Preis bei HackerOne zu erhalten, indem die Hypothese zum Lesen von Dateien getestet wurde. Dem Git-Repository der über CDN bereitgestellten JavaScript-Bibliothek wurde ein symbolischer Link test.js hinzugefügt, der auf die Datei /proc/self/maps verweist. Nach der Veröffentlichung einer neuen Version der Bibliothek verarbeitete der Update-Handler dieses Repository und veröffentlichte die angegebene Datei in cdnjs (test.js wurde als symbolischer Link erstellt und als diese Datei angefordert wurde, wurde der Inhalt von /proc/self/maps zurückgegeben ).

Durch das Ersetzen eines symbolischen Links zur Datei /proc/self/environ stellte der Autor der Studie fest, dass die angegebenen Daten die Werte der Umgebungsvariablen GITHUB_REPO_API_KEY und WORKERS_KV_API_TOKEN enthielten. Die erste Variable speicherte den API-Schlüssel für den Schreibzugriff auf das Robocdnjs-Repository auf GitHub. Die zweite Variable speicherte das Token im KV-Speicher in cdnjs. Mithilfe der erhaltenen Informationen könnte der Angreifer Änderungen an cdnjs vornehmen und die Infrastruktur vollständig kompromittieren.

Source: opennet.ru

Kommentar hinzufügen