CVE-2026-104189 in 3Dviewer Nextcloud
Riassunto
di VulDB • 27/10/2026
Il visualizzatore 3D per Nextcloud è un'applicazione completa per la visualizzazione di modelli 3D su Nextcloud che supporta diversi formati di file 3D. Nelle versioni dalla 1.7.9 alla 3.3.1, l'endpoint pubblico dei file dell'app non eseguiva alcuna autorizzazione della condivisione. Chiunque conoscesse un token di condivisione poteva leggere il contenuto del file condiviso anche quando la condivisione tramite link era protetta da una password. `PublicFileController` estendeva `OCP\AppFramework\Controller` e contrassegnava le sue rotte come `#[PublicPage]`. Nextcloud applica le password per le condivisioni solo attraverso `PublicShareMiddleware`, che termina l'esecuzione precocemente (returns early) per qualsiasi controller che non sia un'istanza di `OCP\AppFramework\PublicShareController`; pertanto, per queste rotte non venivano eseguiti controlli sulla password, sulla scadenza o sul tipo di condivisione. `ShareFileService::loadLinkShare()` aggravava il problema trattando come autorizzato qualsiasi token corrispondente a quanto restituito da `getShareByToken()`. Un token di condivisione è la parte dell'URL che gli utenti incollano in chat, email e ticket. La protezione tramite password esiste proprio per i casi in cui il possesso del token non dovrebbe garantire l'accesso di per sé; tale garanzia non era rispettata. Le richieste a `GET /ocs/v2.php/apps/threedviewer/public/file/{token}/{fileId}` restituivano un codice `200` con l'intero corpo del file per le condivisioni protette da password, senza richiedere la password e senza sessione. La pagina di condivisione nativa di Nextcloud reindirizzava correttamente tali richieste alla richiesta della password. L'impatto è limitato ai file nei formati gestiti dall'app (STL, GLB/glTF, OBJ, STEP, IFC e altri tipi 3D supportati). I file non-3D nella stessa condivisione non sono interessati. Le condivisioni scadute restituivano un codice `500` anziché divulgare i contenuti. Questo problema è risolto nella versione 3.3.2. `PublicFileController` ora estende `PublicShareController` e implementa `isValidToken()`, `isPasswordProtected()` e `getPasswordHash()`, delegando la convalida della password e del token al framework, ottenendo inoltre il throttling (limitazione) degli attacchi brute-force. `ShareFileService::findValidLinkShare()` rifiuta inoltre i tipi di condivisione diversi da link ed email, rifiuta le condivisioni scadute e tratta un'eccezione `ShareNotFound` dal gestore delle condivisioni come "nessuna condivisione" invece di farla emergere come errore 500. Come soluzione temporanea (workaround), disabilitare l'app 3D Viewer (`occ app:disable threedviewer`) o evitare di fare affidamento sulle password per proteggere le condivisioni tramite link che contengono file di modelli 3D, fino all'aggiornamento alla versione corretta.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.