
Exploitation de la vulnérabilité appelée "Dirty_Sock" (CVE-2019-7304) dans l'API REST du démon snapd de Canonical.
Exploiter la vulnérabilité appelée "Dirty_Sock" (CVE-2019-7304) dans l'API REST du démon snapd de Canonical (un service par défaut dans Ubuntu Linux), pour obtenir un accès root.
Guide de Ramil Mustafayev : https://kryptohaker.medium.com/linux-privilege-escalation-via-snapd-using-dirty-sock-exploit-and-demonstration-of-cve-2019-7304-892716cf99ca
Cette vulnérabilité a été exploitée dans les versions de snapd antérieures à 2.37, en raison d'une adresse de socket distante mal validée et analysée lors des contrôles d'accès sur son socket UNIX. Cela a également affecté certaines distributions Unix et Linux à l'époque (par exemple, Ubuntu 16.04). Par conséquent, pour implémenter cette exploitation, nous avons besoin de snapd 2.32 et d'Ubuntu 16.04.
J'ai obtenu le paquet Debian de snapd 2.32 depuis https://launchpad.net/ubuntu/+source/snapd

Tout d'abord, je vérifie la machine Ubuntu pour voir si elle est vulnérable à l'exploitation en utilisant les commandes cat /etc/lsb-release (qui affiche la version d'Ubuntu avec sa description) et uname -a (qui vérifie les informations sur l'ordinateur et le système d'exploitation actuels). Ensuite, nous sommes sûrs que cette machine est exploitable.

L'étape suivante consiste à démarrer le service snapd en utilisant la commande systemctl start snapd (En réalité, lorsque les attaquants exploitent cette faille, le service snapd doit être démarré par l'administrateur, sinon ils ne pourront pas le lancer avec succès). Ensuite, nous pouvons vérifier la version de snapd pour nous assurer qu'il est vulnérable.

Ensuite, je vais vérifier les privilèges de l'utilisateur en utilisant les commandes id (affichant les informations sur l'utilisateur et le groupe) et tail /etc/passwd (le fichier /etc/passwd est utilisé pour garder une trace de chaque utilisateur enregistré). Les résultats ci-dessous montrent que l'attaquant avec le nom d'utilisateur "coby" est un utilisateur normal, qui a le plus faible accès au système.

Pour lancer cette attaque, nous utiliserons le script dirty_sock, qui a deux versions, et obtenu depuis https://github.com/initstring/dirty_sock. Alors que la Version Un nécessite une connexion Internet sortante et le service SSH en cours d'exécution, la Version Deux peut être exécutée directement sans aucune condition.
Dans le fichier dirty_sockv2.py, qui sera utilisé dans cette exploitation, certains composants clés doivent être examinés. Le premier composant clé de ce script est la variable TROJAN_SNAP, qui est une chaîne encodée en base64 représentant un paquet snap installable. Ce paquet est un snap "devmode" vide qui contient un script bash dans le hook d'installation, qui créera un nouvel utilisateur ("devmode" (mode développeur) est un mode d'installation spécial qui permet aux snaps de contourner le confinement strict à des fins de développement et de débogage).

Un autre composant important de ce script est la fonction create_sockfile(). Cette fonction exploite l'analyse non sécurisée dans le fichier "snapd's ucrednet.go" pour générer un fichier socket aléatoire et glisser la dirty sock, ;uid=0;, nous permettant d'écraser la variable UID.

Pour implémenter cette exploitation, j'exécute simplement le fichier dirty_sockv2.py dans le terminal. Après avoir exécuté avec succès l'exploit dirty_sock, nous pouvons voir qu'un compte dirty_sock avec le même mot de passe a été automatiquement créé par le script.

Ensuite, je vérifie le fichier /etc/passwd pour voir la liste des utilisateurs enregistrés, et je vois qu'un nouvel utilisateur appelé "dirty_sock" a été créé.

En utilisant la commande su, je peux me connecter au compte "dirty_sock" en utilisant les identifiants découverts. Après une connexion réussie, je peux vérifier les privilèges de cet utilisateur et voir qu'il est dans le groupe sudo. Cela signifie que l'attaquant a déjà obtenu le contrôle total du système et peut faire n'importe quoi avec les privilèges les plus élevés.

Le score CVSS de cette vulnérabilité est de 8,8 (Haute Sévérité), ce qui signifie qu'elle peut avoir un impact énorme sur le système si elle est exploitée. Cette vulnérabilité a une sévérité élevée, car elle ne nécessite pas de privilège élevé pour être exploitée. Lorsqu'un attaquant a déjà un certain point d'appui sur le système (par exemple, un utilisateur à faible privilège), il peut élever ses privilèges à root, faisant de cette vulnérabilité une menace sérieuse pour la sécurité locale, en particulier dans les environnements multi-utilisateurs ou cloud.