CVE-2026-104189 in 3Dviewer Nextcloud
Zusammenfassung
von VulDB • 27.10.2026
Der 3D-Viewer für Nextcloud ist eine umfassende Anwendung zum Anzeigen von 3D-Modellen in Nextcloud, die mehrere 3D-Dateiformate unterstützt. In den Versionen 1.7.9 bis 3.3.1 führte der öffentliche Dateiendpunkt der App keine Freigabeautorisierung durch. Jeder, der ein Freigab-Token kannte, konnte den Inhalt der freigegebenen Datei lesen, selbst wenn die Linkfreigabe durch ein Passwort geschützt war. `PublicFileController` erweiterte `OCP\AppFramework\Controller` und markierte seine Routen mit `#[PublicPage]`. Nextcloud erzwingt Freigabepasswörter nur über `PublicShareMiddleware`, das bei jedem Controller, der keine Instanz von `OCP\AppFramework\PublicShareController` ist, frühzeitig zurückkehrt – sodass für diese Routen weder eine Passwort-, Ablauf- noch Typprüfung der Freigabe durchgeführt wurde. `ShareFileService::loadLinkShare()` verschärfte dieses Problem dadurch, dass es jedes Token, das von `getShareByToken()` übereingestimmt wurde, als autorisiert behandelte. Ein Freigab-Token ist der Teil der URL, den Nutzer in Chats, E-Mails und Tickets einfügen. Der Passwortschutz besteht genau für den Fall, dass die bloße Kenntnis des Tokens keinen Zugriff gewähren sollte, und diese Garantie galt hier nicht. Anfragen an `GET /ocs/v2.php/apps/threedviewer/public/file/{token}/{fileId}` gaben einen HTTP-Statuscode `200` mit dem vollständigen Dateiinhalt für passwortgeschützte Freigaben zurück, ohne dass ein Passwort oder eine Sitzung erforderlich war. Die eigene Freiseite von Nextcloud leitete solche Anfragen korrekt zur Passworteingabe weiter. Der Umfang ist auf Dateien in den Formaten beschränkt, die diese App verarbeitet (STL, GLB/glTF, OBJ, STEP, IFC und andere unterstützte 3D-Typen). Nicht-3D-Dateien in derselben Freigabe sind nicht betroffen. Abgelaufene Freigaben gaben `500` zurück, anstatt Inhalte preiszugeben. Dieses Problem ist in Version 3.3.2 behoben. `PublicFileController` erweitert nun `PublicShareController` und implementiert `isValidToken()`, `isPasswordProtected()` sowie `getPasswordHash()`, wodurch die Passwort- und Tokenvalidierung an das Framework delegiert wird, was auch Brute-Force-Drosselung ermöglicht. `ShareFileService::findValidLinkShare()` lehnt darüber hinaus Freigabetypen außer Link und E-Mail ab, verwirft abgelaufene Freigaben und behandelt ein von der Freigabeverwaltung zurückgegebenes `ShareNotFound` als „keine Freigabe“, anstatt es als 500-Fehler durchzuschleifen. Als Workaround können Sie die App 3D-Viewer deaktivieren (`occ app:disable threedviewer`) oder darauf verzichten, sich auf Passwörter zum Schutz von Linkfreigaben zu verlassen, die 3D-Modelldateien enthalten, bis ein Upgrade möglich ist.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.