Un sous domaine de synology.com présentait une vulnérabilité d’injection de code JavaScript réfléchi (XSS Reflected) lors des échanges des protocoles d’autorisation (OAuth) suite à la mise en place du paquet « CloudSync ».
Synology est un fournisseur d’équipements de stockage accessibles sur le réseau (NAS) d’une grande qualité et avec une multitude de fonctionnalités. Les NAS Synology sont équipés d’un OS basé sur Linux/Unix et d’une surcouche web pour la gestion et le paramétrage aisé du NAS. Cette interface se nomme le « DSM ».
Au travers du DSM (système d’exploitation haut-niveau en mode web), il est possible de configurer l’ensemble du produit, d’y ajouter des paquets, outils et fonctionnalités développés par l’éditeur et la communauté.
Parmi l’ensemble des paquets disponibles et certifiés officiels (phpMyAdmin, VPN Server, Annuaire, SMTP…) l’un d’eux se nomme “CloudSync” .
With Cloud Sync, you can seamlessly sync and share files among your DiskStation and multiple public clouds, such as Dropbox, Baidu Cloud and Google Drive.
Plutôt que d’avoir plusieurs agents / démons qui se lancent au démarrage de vos machines pour mettre à jour les divers clouds (DropBox, GDrive, SkyDrive, CloudStation, …), il est possible de « remonter » la synchronisation des clouds publics directement dans le Synology. C’est donc le NAS qui s’occupe de synchroniser les divers clouds publics et donc il n’y a plus qu’un seul agent cloud à déployer sur les postes finaux : CloudStation (le cloud local/privatif de Synology lui-même).
En ajoutant un nouveau cloud public à synchroniser dans CloudSync, une fenêtre s’ouvre dans votre navigateur à destination du domaine « update.synology.com » afin de synchroniser votre compte « cloud public » avec votre compte Synology.
Des échanges de protocoles d’autorisations (OAuth) s’exécutent et des va-et-vient entre le domaine « update.synology.com » et les services du cloud public (DropBox, Google Drive, etc.) sont réalisés.
C’est au cours de ces échanges qu’une page du sous domaine « update.synology.com » résume les permissions requises pour autoriser Synology à se connecter au cloud public à synchroniser ; et qu’une injection XSS réfléchie en résulte :
Le traitement, l’échappement, l’encodage et/ou le nettoyage de la variable GET « state » n’était pas convenablement réalisé avant de réinjecter la valeur dans le code source de la page.
Une telle injection, opérant au sein des pages et échanges de protocoles d’autorisation aurait-pu s’avérer critique pour les crédentiels et données personnelles des utilisateurs. En effet, la vulnérabilité d’injection de code ne portait pas directement sur les échanges protocolaires d’autorisations OAuth, mais sur l’implémentation PHP de celui-ci côté Synology.
Nous vous en parlions il y a quelques jours, une vulnérabilité particulièrement critique a été décelée au sein de la bibliothèque JWT (JSON Web Token), très employée pour l’implémentation du protocole OAuth dans de nombreuses technologies (.NET, PHP, Java, etc.). Ce sont la plupart du temps les implémentations des standards et non pas les spécifications des standards eux-mêmes qui peuvent présenter de telles vulnérabilités.
Après plusieurs échanges avec les équipes en charge de la sécurité des services Synology, la vulnérabilité a finalement été corrigée.
Je salue les équipes sécurité de Synology pour leur amabilité, leur intérêt et leur efficacité de correction.
Sources & ressources :
Yann
Consultant Sécurité