Sicherheitsanfälligkeit in cdnjs, die es erlaubte, Code auf den Servern von Cloudflare auszuführen.

Im von Cloudflare bereitgestellten Content Delivery Network cdnjs, das zur Beschleunigung der Bereitstellung von JavaScript-Bibliotheken gedacht ist, wurde eine kritische Sicherheitsanfälligkeit festgestellt, die die Ausführung beliebigen Codes auf den CDN-Servern ermöglicht. Die Gefahr des Problems wird dadurch verstärkt, dass etwa 12,7 % aller Websites im Internet den Dienst zur Bereitstellung von JavaScript-Bibliotheken nutzen, und eine Kompromittierung der Infrastruktur könnte dazu führen, dass die Bibliotheken, die von diesen Websites bereitgestellt werden, manipuliert werden.

Der Dienst cdnjs lädt Pakete aus Git oder dem NPM-Repository herunter und ermöglicht es jeder Website, kostenlos das Cloudflare Content Delivery Network zur Beschleunigung der Bereitstellung von JavaScript-Bibliotheken zu nutzen. Bei der Untersuchung des Codes der Komponenten von cdnjs, die auf GitHub veröffentlicht sind, wurde festgestellt, dass zum Entpacken von NPM-Paketen in tgz-Archiven das Standardmodul archive/tar in der Programmiersprache Go verwendet wird, das die Dateiliste so wie sie ist ohne Normalisierung der Pfade ausgibt. Wenn das Skript den Inhalt basierend auf dieser Liste entpackt, kann das Vorhandensein von Dateien im Archiv mit Pfaden wie „..\/..\/..\/..\/..\/..\/..\/tmp\/test“ dazu führen, dass beliebige Dateien im System überschrieben werden, soweit es die Zugriffsrechte zulassen.

Es wurde angenommen, dass ein Angreifer einen Antrag auf Hinzufügung seiner Bibliothek zu cdnjs stellen und ein speziell gestaltetes Archiv mit Dateien, die die Zeichen „..\/“ im Pfad enthalten, in das NPM-Repository hochladen könnte. Auf den Servern von cdnjs wird regelmäßig die Operation „autoupdate“ durchgeführt, bei der der Handler neue Versionen der vorgeschlagenen Bibliothek herunterlädt und den Inhalt entpackt. Mit Hilfe von Dateien mit den Pfaden „..\/“ könnte der Angreifer erreichen, dass Dateien mit Skripten des Dienstes überschrieben werden und sein Code auf Server dem das Entpacken stattfand.

Bei der Aktualisierung von Git wurde festgestellt, dass der aktualisierende Handler symbolische Links beim Kopieren von Dateien aus Git nicht berücksichtigte. Diese Eigenschaft erlaubte es, das Lesen beliebiger Dateien von Server durch das Hinzufügen von symbolischen Links zu Git.

Experimente mit der Demonstration des Hacks der cdnjs zur Erlangung einer Belohnung auf HackerOne wurden mit der Überprüfung einer Hypothese bezüglich des Lesens von Dateien begonnen. Ein symbolischer Link test.js, der auf die Datei /proc/self/maps verweist, wurde im Git-Repository der über CDN bereitgestellten JavaScript-Bibliothek hinzugefügt. Nach der Veröffentlichung einer neuen Version behandelte der Aktualisierungsprozess dieses Repository und veröffentlichte die angegebene Datei in cdnjs (test.js wurde als symbolischer Link erstellt und lieferte beim Abrufen dieser Datei den Inhalt von /proc/self/maps).

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

Quelle: opennet.ru

60GB SSD 8Gb DDR4