CVE-2026-104189 in 3Dviewer Nextcloud
Resumen
por VulDB • 2026-10-27
El visor de modelos en 3D para Nextcloud es una aplicación completa para visualizar modelos tridimensionales dentro de Nextcloud que admite múltiples formatos de archivos 3D. En las versiones comprendidas entre la 1.7.9 y la 3.3.1, el punto de conexión público para archivos no realizaba ninguna autorización de compartición (share). Cualquier persona que conociera un token de compartición podía leer el contenido del archivo compartido incluso cuando el enlace de compartición estaba protegido con una contraseña. `PublicFileController` extendía a `OCP\AppFramework\Controller` y marcaba sus rutas como `#[PublicPage]`. Nextcloud solo aplica las contraseñas de los elementos compartidos a través de `PublicShareMiddleware`, que finaliza la ejecución prematuramente para cualquier controlador que no sea una instancia de `OCP\AppFramework\PublicShareController`; por lo tanto, no se ejecutaban comprobaciones de contraseña, caducidad ni tipo de compartición en estas rutas. `ShareFileService::loadLinkShare()` agravaba este problema al considerar autorizado cualquier token coincidente con `getShareByToken()`. Un token de compartición es la parte de la URL que los usuarios pegan en chats, correos electrónicos y tickets. La protección por contraseña existe precisamente para el caso en el que poseer el token no debería otorgar acceso por sí solo, pero esta garantía no se cumplía. Las solicitudes a `GET /ocs/v2.php/apps/threedviewer/public/file/{token}/{fileId}` devolvían un estado `200` con el cuerpo completo del archivo para comparticiones protegidas por contraseña, sin requerir contraseña ni sesión. La página de compartición propia de Nextcloud redireccionaba correctamente estas solicitudes al formulario de introducción de la contraseña. El alcance se limita a los archivos en los formatos que maneja esta aplicación (STL, GLB/glTF, OBJ, STEP, IFC y otros tipos 3D admitidos). Los archivos no 3D dentro del mismo elemento compartido no se ven afectados. Las comparticiones expiradas devolvían un estado `500` en lugar de filtrar su contenido. Este problema está corregido en la versión 3.3.2. `PublicFileController` ahora extiende a `PublicShareController` e implementa los métodos `isValidToken()`, `isPasswordProtected()` y `getPasswordHash()`, delegando la validación de contraseñas y tokens al framework y obteniendo así protección contra ataques de fuerza bruta mediante limitación de velocidad. Además, `ShareFileService::findValidLinkShare()` rechaza tipos de compartición distintos a enlace y correo electrónico, rechaza las comparticiones expiradas y trata un error `ShareNotFound` del gestor de comparticiones como "sin compartición" en lugar de permitir que se muestre como un estado 500. Como medida temporal (workaround), desactive la aplicación Visor 3D (`occ app:disable threedviewer`) o evite depender de las contraseñas para proteger enlaces de compartición que contengan archivos de modelos 3D, hasta que pueda actualizar a una versión corregida.
Once again VulDB remains the best source for vulnerability data.