Zum Inhalt springen
← Zurück zum Cyberlagebild
Zuletzt aktualisiert 24.08.2026 22:48

Cloudreve's remote download file paths can escape the selected destination directory

CVSS –1 Quelle

Beschreibung

### Zusammenfassung Cloudreve vertraut Dateipfaden, die vom konfigurierten Remote-Downloader zurückgegeben werden. Ein vom Downloader gemeldeter Pfad wie `../../escaped.txt` kann dazu führen, dass eine heruntergeladene Datei außerhalb des vom Benutzer ausgewählten Zielverzeichnisses erstellt wird. ### Details Im Remote-Download-Master-Transferpfad verbindet Cloudreve die vom Benutzer ausgewählte Ziel-URI mit dem vom Downloader gemeldeten Dateinamen. ``go // pkg/filemanager/workflows/remote download.go:436-438 sanitizedName := sanitizeFileName(file). Name) dst := dstUri.JoinRaw(sanitizedName) src := filepath.FromSlash(path.Join(m.state.Status.SavePath, file). Name) Das gleiche Problem besteht auch beim Erstellen von Slave-Upload-Nutzlasten. ``go // pkg/filemanager/workflows/remote download.go:323-327 dst := dstUri.JoinRaw(sanitizeFileName(f.Name)) src := path.Join(m.state.Status.SavePath, f.Name) payload. Dateien = append(Payload). Dateien, SlaveUploadEntity{ Src: src, Uri: dst, ``` Der Desinfektionsmittel entfernt keine `/`, `.` oder `..` Pfadsegmente. ``go // pkg/filemanager/workflows/remote download.go:648-650 func sanitizeFileName(name string) string {r := strings.NewReplacer("\\", " ", ":", "*", " ", "?", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "|", " ") gibt r.Replace(name) } `` `JoinRaw()` auf und verbindet die Segmente, so dass `..` den endgültigen URI-Pfad beeinflussen kann. ``go // pkg/filemanager/fs/uri.go:173-175 func (u *URI) JoinRaw(elem string) *URI { return u.Join(strings)} Split(Strings). TrimPrefix(elem, Separator), Separator)... } ``` Für aria2 leitet Cloudreve `Downloader ab. TaskFile. Name` aus dem von `aria2.tellStatus().files[).path` zurückgegebenen Pfad ```go // pkg/downloader/aria2/aria2.go:148-159 relPath := strings. TrimPrefix(filepath.ToSlash(item)) Pfad), savePath wenn len(relPath) > 0 { relPath = relPath[1:] } Return Downloader. TaskFile{ Index: index, Name: relPath, ``` Wenn das ausgewählte Ziel also lautet: `cloudreve://my/victim/safe`, meldet der Downloader `../../escaped.txt`, wird das endgültige Upload-Ziel `cloudreve://my/escaped.txt`. Das Problem kann den endgültigen Cloudreve-URI weiter in den zugänglichen Namensraum des Benutzers verschieben, unterliegt jedoch den normalen Berechtigungs- und Upload-Prüfungen von Cloudreve. ### PoC Der PoC verwendet einen gefälschten aria2 JSON-RPC-Dienst, um einen Downloader zu simulieren, der einen Traversalpfad zurückgibt. Die anfällige Eingabe ist Downloader-Metadaten, die von der Downloader-API zurückgegeben werden, nicht der HTTP-Antwortkörper der heruntergeladenen URL. Setup: ``text Cloudreve offizielles Docker-Image PostgreSQL Redis Fake aria2 JSON-RPC service ``Konfigurieren Sie den Master-Knoten im Cloudreve-Administrator UI: ``text Remote-Download-Fähigkeit: aktivierter Downloader-Provider: aria2 aria2 RPC-Server: http://fake-aria2:6800/jsonrpc aria2 token: empty `` Create this folder structure in the file manager: ``text My files / victim / safe / `` Create a remote download task using any URL in the `victim/safe` directory, for example: ``text http://attacker.invalid/file ``The fake aria2 service returns: ``text files[0].path = /../../escaped.txt `` Expected result ..

Hersteller
Produktgithub.com/cloudreve/Cloudreve/v4
Produktfamiliego
Betroffene Versionen<= 4.0.0-20260606032813-26b6b1044b02
Behobene VersionenKeine Angaben

Quellen & weiterführende Informationen

Hier werden ausschließlich tatsächlich zu dieser Schwachstelle gespeicherte Quellenbelege angezeigt.

Was ist zur Behebung zu tun?

Herstellerhinweise prüfen und das betroffene Produkt kurzfristig patchen oder kompensierende Schutzmaßnahmen aktivieren.

PrioritätGrün
EinordnungPlanbar behandeln und überwachen.

Empfohlene Schritte

  • Betroffene Systeme identifizieren: github.com/cloudreve/Cloudreve/v4.
  • Exposition prüfen: Internet-Erreichbarkeit, Admin-Oberflächen, VPN, Mail- oder Webdienste.
  • Hersteller-Advisory öffnen und verfügbare Updates, Workarounds oder Deaktivierungen prüfen.
  • Nacharbeiten dokumentieren: betroffene Assets, Maßnahme, Zeitpunkt, Restrestrisiko.

Übergangsmaßnahmen

  • Zugriff auf betroffene Dienste auf vertrauenswürdige Netze einschränken.
  • WAF/IDS/EDR-Regeln und Hersteller-IOCs aktivieren, sofern verfügbar.
  • Nicht benötigte Funktionen, Plugins oder Dienste temporär deaktivieren.
  • Administrative Zugänge besonders absichern: MFA, Passwortrotation, Session-Invalidierung.