Ubuntu corrige une vulnérabilité exploitée dans snapd

Date de publication :

Chris Moberly, chercheur au laboratoire Shenanigans, a découvert au mois de janvier dernier qu’Ubuntu était vulnérable à une élévation de privilèges rendue possible via l’exploitation d’une faille de l’API snapd. Cette vulnérabilité s'est vue attribuée le nom « dirty_sock ».

Le paquet snapd est installé par défaut dans toutes les distributions Ubuntu. Il s’agit d’un format standard visant à faciliter l'installation de nouvelles versions de logiciels à destination des développeurs de distribution Linux.

Détails techniques

CVE-2019-7304 [CVSS v3 9.8] - Dirty_sock existe en deux versions. Elles ont toutes deux pour objectif de contourner l’authentification d’Ubuntu One (une plateforme permettant d’accéder à tous les services Ubuntu) :

  • La première version exploite l’API snapd « POST /v2/create-user ». L’attaquant doit créer un compte sur Ubuntu One, puis renseigner la clé publique SSH de la victime (celle de la victime) au sein du code malveillant et l’email de l’attaquant. Le code va ensuite créer sur l’appareil de l’attaquant un compte root lié à la victime par l'intermédiaire d'une connexion SSH. L’exploitation de cette faille nécessite une connexion Internet ainsi qu’un service SSH soit configuré afin que l’attaquant puisse s’y connecter pendant l’exploitation. Ces conditions limitent donc le périmètre d’exploitation aux équipements ayant cette configuration.
  • La deuxième version permet de pallier les limitations de la première. Elle utilise l’API « POST/v2/snaps » qui charge un script bash dans un logiciel permettant d’ajouter un utilisateur directement en local (en écrivant dans le répertoire /etc/sudoers/). Deux prérequis sont nécessaires : le premier est de mettre le logiciel en mode « cours de développement » (devmode) pour avoir accès à au système d’exploitation de la victime ; le second est d’exécuter le script au moment de l’installation du logiciel.

L’API POST/v2/create-user créé un utilisateur local sur la machine, cependant pour utiliser cette API il faut avoir les droits administrateurs (root). La faille réside dans le contrôle de l’identité de l’administrateur à l’origine de la requête. Pour obtenir les informations sur l’identité administrateur on rassemble les interfaces de connexion (sockets) de type AF_UNIX qui possèdent des informations d’identification comme l’identifiant de l’utilisateur « UID ». Les chercheurs se sont aperçus qu’ils pouvaient lier les sockets entre eux et ainsi utiliser un système de fichier qui leur appartient. Les chercheurs ont donc créé leur propre socket et écrit un fichier pour y injecter l’UID 0 (qui correspond au compte de l'administrateur système). En la liant à une nouvelle socket, l’itération garde le dernier UID 0 et écrase donc l’UID réel, permettant ainsi d'obtenir les privilèges les plus élevés.

Des correctifs ont été publiés par les éditeurs snapd et Ubuntu, il est donc conseillé d’appliquer ces correctifs compte tenu de la criticité de la vulnérabilité.

Informations

La faille est activement exploitée :

Un correctif existe :

Une mesure de contournement existe :

Risques

Risques

  • Elévation de privilèges.

Criticité

  • Score CVSS : En cours d'évaluation.

Existence d’un code d’exploitation de la vulnérabilité

  • Le code de l’exploit est public et disponible sur GitHub.

Composants & versions vulnérables

  • Le correctif est publié

CVE

  • CVE-2019-7304

Solutions ou recommandations

Mise en place de correctifs de sécurité

  • Un correctif a été édité pour snapd dans un bulletin éditeur. Les versions supérieures à 2.37.1 ne sont pas vulnérables et les versions Ubuntu supérieures à 18.10 ne sont pas vulnérables.

Solution de contournement

  • Aucune solution de contournement n’est proposée.