Vulnérabilités dans Pagure et OBS, permettant la compromission des paquets dans les dépôts Fedora et openSUSE

Des chercheurs en sécurité de la société Fenrisk ont révélé des vulnérabilités dans les outils Pagure et OBS (Open Build Service), permettant de compromettre les infrastructures de création de paquets des distributions Fedora et openSUSE. Les chercheurs ont démontré la possibilité d'effectuer une attaque pour exécuter du code arbitraire sur des serveurs utilisant Pagure et OBS, ce qui pouvait être utilisé pour injecter des modifications dans les paquets des dépôts Fedora et openSUSE.

La plateforme Pagure, utilisée dans Fedora pour collaborer sur le code et les métadonnées des paquets, a révélé 4 vulnérabilités. L'exploitation des problèmes découverts nécessite un compte sur le service Pagure, que tout le monde peut obtenir (actuellement, 24899 utilisateurs sont enregistrés sur Pagure.io). Trois problèmes permettent de lire des fichiers sur le système, et un problème permet d'exécuter son propre code sur le serveur. Les problèmes ont été identifiés le 1er janvier 2024, rapportés via bugzilla.redhat.com le 25 avril 2024 et corrigés dans Pagure en trois heures.

  • Les vulnérabilités CVE-2024-4981 et CVE-2024-47515 sont causées par un traitement incorrect des liens symboliques dans les fonctions de mise à jour de fichiers et de génération d'archives. Ces vulnérabilités permettent de lire le contenu de fichiers locaux sur le serveur, par exemple, il est possible de découvrir le contenu du fichier contenant les paramètres de session de l'administrateur de Pagure et d'accéder à ses droits. L'exploitation de la vulnérabilité dans la fonction _update_file_in_git() consiste à créer un dépôt dans Pagure ; d'ajouter à celui-ci un commit avec un nouveau fichier créé comme lien symbolique vers un fichier système souhaité ; d'ouvrir ce fichier pour édition dans l'interface web.
  • La vulnérabilité (CVE-2024-4982) dans la fonction view_issue_raw_file() permet de sortir du répertoire de base en indiquant les caractères « /.. » dans les paramètres de l'issue demandée. Ce problème permet de lire des fichiers sur le système, en fonction des droits d'accès du processus sous lequel s'exécute l'interface web. Par exemple, pour voir le fichier /etc/passwd, on peut ouvrir la page « http://pagure.local:5000/your-repository/issue/raw/../../../../../../etc/passwd ».
  • La vulnérabilité (CVE-2024-47516) dans la fonction PagureRepo.log() permet d'injecter ses propres commandes et d'exécuter du code sur le serveur. Le problème est dû au fait que lors de la consultation de l'historique des modifications de fichiers via l'interface web, la commande « git » est appelée avec l'identifiant de la branche dans la ligne de commande (par exemple, « /usr/bin/git —pretty=oneline —abbrev-commit — README.md »). La validité de l'identifiant n'est pas vérifiée, ce qui permet de transmettre n'importe quelle option de ligne de commande, comme « —output=/tmp/foo.bar » pour rediriger la sortie vers un fichier. L'attaquant peut écraser un fichier sur le système en envoyant une requête de la forme suivante : http://pagure.local:5000/test/history/README.md?identifier=—output=/tmp/foo.bar

    Pagure s'exécute en tant qu'utilisateur git, donc il ne peut écraser que les fichiers de cet utilisateur. Pour exécuter son propre code sur le serveur, on peut utiliser un service d'accès au dépôt via SSH, où la commande « bash -c /usr/libexec/pagure/aclchecker.py » est exécutée. L'attaquant peut exploiter cette vulnérabilité pour écraser le fichier « /srv/git/.bashrc », et ce fichier sera exécuté par l'interpréteur de commandes bash lors de l'accès au dépôt via ssh.

    L'attaque consiste à s'enregistrer sur la plateforme Pagure, à créer un dépôt, à ajouter un fichier README.md dans le dépôt avec une note de validation de type « || /bin/bash » et à envoyer une requête « http://pagure.local:5000/test/history/README.md?identifier=—output=/srv/git/.bashrc ». Ainsi, une ligne de type « 34а5с43 || /bin/bash » sera écrite dans le fichier « /srv/git/.bashrc ». Pour exécuter le fichier créé « /srv/git/.bashrc », il suffit de se connecter au dépôt via SSH avec son propre compte. L'exécution de code avec les droits de l'utilisateur git sur le serveur Pagure permet de contrôler tout le contenu des dépôts avec les packages.

Une vulnérabilité a été identifiée dans la plateforme OBS (Open Build Service), utilisée dans openSUSE et certains autres systèmes d'exploitation pour la construction de paquets (CVE-2024-22033), permettant d'exécuter son code sur le serveur. La vulnérabilité a été découverte le 27 juin 2024, signalée au projet openSUSE le 29 juin et corrigée le 10 juillet.

La vulnérabilité se trouve dans le service «obs-service-download_url», où il manquait une vérification appropriée de l'URL utilisée lors de l'exécution de l'outil wget à partir d'un script chargé de télécharger le code source dans OBS. Un attaquant peut spécifier dans le service OBS la configuration du paquet généré, dans laquelle au lieu de l'URL pour télécharger le code, une option de ligne de commande pour wget peut être indiquée, par exemple : —output-document=\/tmp\/test tempfile

Pour contourner l'erreur renvoyée lors de la tentative de lancement de wget sans URL, un exemple fournit l'option «download-manifest», permettant de spécifier une liste d'URL dans un fichier séparé. L'exemple ci-dessus entraînera l'exécution de la commande : \/usr\/bin\/wget -i \/srv\/obs\/service\/XXXXX\/src\/tempfile -4 —output-document=\/tmp\/test

qui permet d'écrire dans le fichier \/tmp\/test le contenu téléchargé à partir du lien indiqué dans le fichier \/srv\/obs\/service\/XXXXX\/src\/tempfile, provenant du code téléchargé par l'attaquant dans OBS via l'interface build.opensuse.org, qui permet une inscription libre. En plus d'écraser le fichier sur le serveur, l'attaquant peut également s'envoyer n'importe quel fichier en spécifiant au lieu de «—output-document» l'option «—post-file», par exemple, «—post-file=\/etc\/passwd». Ainsi, l'attaquant peut lire et écrire des fichiers sur le serveur, selon les autorisations accordées au service OBS.

Pour transformer la possibilité d'écriture de fichiers en exécution de code sur le serveur, les chercheurs ont proposé une méthode en deux étapes. Deux étapes sont nécessaires, car un attaquant peut créer un fichier «.wgetrc» avec les configurations de wget, mais cela ne suffit pas pour exécuter des commandes. Cependant, à travers «.wgetrc», il est possible de créer des conditions pour exécuter n'importe quel programme dans le système, mais sans lui transmettre d'arguments. Pour lancer un code arbitraire, il est proposé de lancer le programme «prove», qui traite le fichier de configuration «.proverc», permettant de spécifier l'option «—exec» pour exécuter n'importe quel code.

Lors de la première étape, des manipulations avec le « download-manifest » dans le répertoire personnel de l'utilisateur « obsservicerun » créent un fichier « .proverc », qui inclut les commandes qui seront exécutées lors du lancement du processus « prove ». À la deuxième étape, un fichier « .wgetrc » est créé avec le paramètre « use-askpass=\/usr\/bin\/prove », entraînant l'appel de « prove ». Une fois ces fichiers créés, il suffit de préparer les conditions de téléchargement de n'importe quelle donnée à l'aide de wget, ce qui déclenchera l'exécution du code de l'attaquant sur le serveur avec les droits de l'utilisateur « obsservicerun ». Les droits de l'utilisateur « obsservicerun » suffisent pour extraire les clés des dépôts utilisées par les utilisateurs OBS pour signer les paquets.

Ajout : L'équipe de SUSE Product Security estime que le danger de la vulnérabilité dans OBS est surestimé et que l'affirmation des chercheurs selon laquelle le problème permet de compromettre tous les paquets dans la distribution openSUSE est inexacte. Il est souligné que les services dans l'infrastructure build.opensuse.org s'exécutent dans des conteneurs isolés, recréés et ne contenant pas d'informations critiques. La vulnérabilité identifiée est évaluée comme dangereuse, mais insuffisante pour compromettre l'infrastructure de construction openSUSE et les paquets générés. De plus, il est indiqué que les actions dans l'interface OBS, décrites dans l'exemple d'attaque, ne pouvaient être effectuées que dans une version d'OBS installée localement sur la station de travail du développeur.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster