Eine Schwachstelle in cdnjs, die es ermöglichte, Code auf Cloudflare-Servern auszuführen.

Im von Cloudflare bereitgestellten Content Delivery Network cdnjs, das für die Beschleunigung der Bereitstellung von JavaScript-Bibliotheken gedacht ist, wurde eine kritische Schwachstelle entdeckt, die die Ausführung beliebigen Codes auf den CDN-Servern ermöglicht. Die Gefährlichkeit des Problems wird dadurch verstärkt, dass etwa 12,7 % aller Websites im Internet den Dienst nutzen und eine Kompromittierung der Infrastruktur es erlaubt, die von diesen Websites bereitgestellten Bibliotheken zu ersetzen.

Der cdnjs-Dienst lädt Pakete aus Git oder dem NPM-Repository herunter und ermöglicht dann jeder Website die kostenlose Nutzung des Cloudflare Content Delivery Networks, um die Ladezeiten von JavaScript-Bibliotheken zu verbessern. Bei der Untersuchung des Codes der cdnjs-Komponenten, die auf GitHub veröffentlicht sind, wurde festgestellt, dass zum Entpacken von NPM-Paketen in tgz-Archiven das Standardmodul archive/tar in Go verwendet wird, das die Dateipfade unverändert ausgibt, ohne diese zu normalisieren. Wenn das Skript den Inhalt basierend auf der ausgegebenen Liste entpackt, können Dateien im Archiv wie „../../../../../../../tmp/test“ zu einer Überschreibung beliebiger Dateien im System führen, abhängig von den Zugriffsrechten.

Es wurde angenommen, dass ein Angreifer einen Antrag auf Hinzufügen seiner Bibliothek zu cdnjs stellen und ein speziell formatiertes Archiv in das NPM-Repository hochladen kann, das Dateien mit den Symbolen „../“ im Pfad enthält. Auf den cdnjs-Servern wird regelmäßig die „Autoupdate“-Operation durchgeführt, bei der der Handler neue Versionen der vorgeschlagenen Bibliothek herunterlädt und den Inhalt entpackt. Mit Dateien, die die Pfade „../“ enthalten, kann der Angreifer eine Überschreibung von Dateien mit den Skripten des Dienstes erreichen und seinen Code ausführen auf Server dem die Entpackung stattfand.

Im Fall von Aktualisierungen aus Git wurde festgestellt, dass der aktualisierende Handler symbolische Links beim Kopieren von Dateien aus Git nicht berücksichtigte. Diese Besonderheit ermöglichte das Lesen beliebiger Dateien von Server durch das Hinzufügen symbolischer Links in Git.

Die Experimente zur Demonstration des Hacks von cdnjs zur Erlangung einer Belohnung auf HackerOne begannen mit der Überprüfung der Hypothese bezüglich des Lesens von Dateien. Im 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 lieferte bei einer Anfrage den Inhalt von /proc/self/maps aus).

Indem er den symbolischen Link zur Datei /proc/self/environ einfügte, stellte der Forscher fest, dass die übergebenen Daten die Werte der Umgebungsvariablen GITHUB_REPO_API_KEY und WORKERS_KV_API_TOKEN enthielten. In der ersten Variablen wurde der API-Schlüssel für den schreibberechtigten Zugriff auf das Repository robocdnjs auf GitHub gespeichert. In der zweiten Variablen befand sich der Token für das KV-Speicher in cdnjs. Mit diesen Informationen konnte der Angreifer Änderungen an cdnjs vornehmen und die gesamte Infrastruktur kompromittieren.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster