CVE Vulnerabilities

CVE-2026-104189

Missing Authentication for Critical Function

Published: Oct 27, 2026 | Modified: Oct 27, 2026
CVSS 3.x
N/A
Source:
NVD
CVSS 2.x
RedHat/V2
RedHat/V3
Ubuntu
root.io logo minimus.io logo echo.ai logo

The 3D Viewer for Nextcloud is a comprehensive 3D model viewer application for Nextcloud that supports multiple 3D file formats. In versions 1.7.9 through 3.3.1, the apps public file endpoint performed no share authorization. Anyone who knows a share token could read the shared files contents even when the link share was protected by a password. PublicFileController extended OCPAppFrameworkController and marked its routes #[PublicPage]. Nextcloud only enforces share passwords through PublicShareMiddleware, which returns early for any controller that is not an OCPAppFrameworkPublicShareController instance — so no password, expiry, or share-type check ran for these routes. ShareFileService::loadLinkShare() compounded this by treating any token that getShareByToken() matched as authorised. A share token is the part of the URL that people paste into chats, emails, and tickets. Password protection exists precisely for the case where holding the token should not by itself grant access, and that guarantee did not hold. Requests to GET /ocs/v2.php/apps/threedviewer/public/file/{token}/{fileId} returned 200 with the full file body for password-protected shares, with no password and no session. Nextclouds own share page correctly redirected such requests to the password prompt. Scope is limited to files in the formats this app handles (STL, GLB/glTF, OBJ, STEP, IFC, and the other supported 3D types). Non-3D files in the same share are unaffected. Expired shares returned 500 rather than leaking contents. This issue is fixed in 3.3.2. PublicFileController now extends PublicShareController and implements isValidToken(), isPasswordProtected(), and getPasswordHash(), delegating password and token validation to the framework and gaining brute-force throttling. ShareFileService::findValidLinkShare() additionally rejects share types other than link and email, rejects expired shares, and treats a ShareNotFound from the share manager as no share instead of letting it surface as a 500. As a workaround, disable the 3D Viewer app (occ app:disable threedviewer), or avoid relying on passwords to protect link shares that contain 3D model files, until you can upgrade.

Weakness

The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.

Potential Mitigations

  • Divide the software into anonymous, normal, privileged, and administrative areas. Identify which of these areas require a proven user identity, and use a centralized authentication capability.
  • Identify all potential communication channels, or other means of interaction with the software, to ensure that all channels are appropriately protected, including those channels that are assumed to be accessible only by authorized parties. Developers sometimes perform authentication at the primary channel, but open up a secondary channel that is assumed to be private. For example, a login mechanism may be listening on one network port, but after successful authentication, it may open up a second port where it waits for the connection, but avoids authentication because it assumes that only the authenticated party will connect to the port.
  • In general, if the software or protocol allows a single session or user state to persist across multiple connections or channels, authentication and appropriate credential management need to be used throughout.
  • Where possible, avoid implementing custom, “grow-your-own” authentication routines and consider using authentication capabilities as provided by the surrounding framework, operating system, or environment. These capabilities may avoid common weaknesses that are unique to authentication; support automatic auditing and tracking; and make it easier to provide a clear separation between authentication tasks and authorization tasks.
  • In environments such as the World Wide Web, the line between authentication and authorization is sometimes blurred. If custom authentication routines are required instead of those provided by the server, then these routines must be applied to every single page, since these pages could be requested directly.
  • Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid.
  • For example, consider using libraries with authentication capabilities such as OpenSSL or the ESAPI Authenticator [REF-45].

References