
Eclipse Che CSRF führt zu RCE
Dieser Fehler erlaubt es einer entfernten Website, einen beliebigen Docker-Container auf Maschinen zu erstellen und zu starten, auf denen Che vor den Versionen 7.3.0 und 7.4.1 läuft, wenn ein Benutzer eine Webseite besucht.
Dies ist ein CSRF-Fehler, der es einer entfernten Website erlaubt, einen Docker-Container auf der Maschine einer Person zu erstellen und zu starten, die Eclipse Che im Standalone-Modus ausführt. Viele Parameter unter der Kontrolle des Angreifers ermöglichen ein präzises Maß an Kontrolle. Einige Entwickler nutzen Che im Standalone-Modus als bequeme Möglichkeit, ihre lokalen Docker-Container zu verwalten.
Dies war möglich, weil Che CORS standardmäßig aktiviert hatte. Die Probleme damit sind für Personen, die verstehen, was dies bedeutet, ziemlich offensichtlich, aber im Wesentlichen reagierte Che auf Anfragen von beliebigen Quellen. Obwohl Browser ihr Bestes tun, um CORS-Angriffe zu erschweren, ist es möglich, wenn der Server CORS erlaubt, eine erfolgreiche POST-Anfrage an einen lokal laufenden Che-Dienst von einer entfernten Website aus zu erstellen.
Im Wesentlichen bedeutet dies, dass jede nicht authentifizierte API-Methode aufgerufen werden kann, wenn ein Computer, auf dem Che im Standalone-Modus läuft, ihre Website besucht. Dies umfasst das Erstellen und Ausführen neuer Docker/OpenShift-Container.
Ein einfacher POC ist in diesem Readme enthalten, aber ein Blick auf das an den lokalen Che-Dienst gesendete JSON zeigt eine Reihe ziemlich interessanter Parameter, die gesteuert werden können, darunter welches Image, welche Befehle beim Start ausgeführt werden sollen, welche Server im Container gestartet werden sollen und andere recht interessante Eigenschaften.
Um diese Schwachstelle auszunutzen, müssen Sie jemanden ins Visier nehmen, der Eclipse Che auf seinem Computer ausführt. Sie müssen Ihr Ziel dazu bringen, eine Seite zu besuchen, die Sie über HTTP steuern. Von dort aus erledigt das XMLHttpRequest seine Arbeit und Sie können loslegen. Um vollständig zu verstehen, wie diese Schwachstelle ausgenutzt werden kann, sollten Sie sich den Quellcode von Che ansehen, um die API kennenzulernen, oder einfach mit dem POC spielen, den ich in diesem Repo platziert habe. Im Wesentlichen möchten Sie entweder einen Container oder einen Befehl in Ihrem neu gestarteten Container erstellen, der Ihnen die Art von Ausgangspunkt verschafft, die Sie möchten. Sie könnten einen Server Ihrer Wahl einrichten oder einfach dafür sorgen, dass der Befehl beim Start Ihre Payload herunterlädt und von dort aus zu operieren beginnt. Dieser Angriff eignet sich sowohl für opportunistische als auch für gezielte Angriffe.
Für eine ausführlichere Diskussion werfen Sie einen Blick auf den hier verfolgten Fehler. Der Großteil davon wiederholt einfach diesen Beitrag.
Damit dieser Angriff erfolgreich ausgeführt werden kann, muss die Seite von einem HTTP- (nicht HTTPS-) Server ausgeliefert werden. Dies ist notwendig, da ein lokaler Che-Server über HTTP läuft und gängige Browser das Mischen von HTTP- und HTTPS-Inhalten nicht mögen.
Um dieses Problem zu beheben, hat das Che-Team CORS einfach standardmäßig deaktiviert. Dies sollte diese Art von Angriff zumindest in Zukunft erheblich erschweren. Wenn Sie Che lokal zur Verwaltung Ihrer Docker-Images ausführen, sollten Sie ein Upgrade in Betracht ziehen.