Un peu de contexte
Owncloud permet de transformer un serveur en une solution Cloud, permettant à ses utilisateurs d’y stocker leurs fichiers, photos, calendries, contacts, … Cette solution est souvent déployée par des entreprises afin de stocker leurs données de manière souveraine.
La plateforme permet également aux utilisateurs de centraliser leurs fichiers provenant des stockages externes, comme d’un FTP ou un compte Google Drive, vers celle-ci.
C’est sur cette fonctionnalité que nous avons découvert une vulnérabilité.

Idor Idor
Une fois que nous avons créé notre stockage externe, il est possible de mettre à jour ce formulaire pour modifier, par exemple, le champ « Folder name ». Lors de la mise à jour, une requête est envoyée avec tout le formulaire au format JSON. Dans ce formulaire, le champ ‘ID’, étant un nombre entier, est l’identifiant de notre stockage externe, généré par le serveur lorsque nous avons créé le stockage.
Imaginons qu’un autre utilisateur sur Owncloud, par exemple l’administrateur, possède-lui aussi un stockage externe, avec pour ID « 18 ».
Maintenant, nous rejouons la requête de mise à jour du formulaire en tant qu’utilisateur « normal_user », n’ayant aucun droit particulier, mais changeons l’ID par 18, le stockage externe de l’administrateur.

- On indique l’ID du stockage de l’admin
- On met un nom de stockage arbitraire « storage_pwned »
- Pour être certains, nous spécifions également un host arbitraire, ici un collaborator Burp. Précision importante: il n’est pas obligatoire de changer l’hôte. Changer l’hôte signifie que vous cassez la configuration du stockage et que le serveur Owncloud ne pourra plus récupérer les fichiers du stockage originale.
Une fois la requête envoyée, le serveur rencontre une erreur 404 (4), et celui-ci nous indique qu’il n’a pas trouvé de stokage avec l’ID que nous avons indiqué (5).
Cependant, lorsque l’on se connecte au compte de l’admin, voici ce que nous observons :
