
Atelier sur l'élévation de privilèges locale Looney Tunables (CVE-2023-4911)
Atelier Looney Tunables d'élévation de privilèges locaux (CVE-2023-4911) (à des fins éducatives uniquement)
En informatique, un éditeur de liens dynamique est la partie d'un système d'exploitation qui charge et lie les bibliothèques partagées nécessaires à un exécutable lorsqu'il est exécuté, en copiant le contenu des bibliothèques du stockage persistant vers la RAM, en remplissant les tables de sauts et en relocalisant les pointeurs.
Par exemple, nous avons un programme qui utilise la bibliothèque openssl pour calculer le hachage md5 :``` $ head md5_hash.c #include <stdio.h> #include <string.h> #include <openssl/md5.h>
ld.so analyse le binaire et essaie de trouver la bibliothèque liée à <openssl/md5.h>```
$ ldd md5_hash
linux-vdso.so.1 (0x00007fffa530b000)
libcrypto.so.3 => /lib/x86_64-linux-gnu/libcrypto.so.3 (0x00007f19cda00000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f19cd81e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f19ce032000)
Comme nous pouvons le voir, il trouve la bibliothèque cryptographique nécessaire dans /lib/x86_64-linux-gnu/libcrypto.so.3. Pendant le démarrage du programme, il place le code de cette bibliothèque dans la RAM du processus et lie toutes les références à cette bibliothèque.
Lorsqu'un programme est lancé, ce chargeur examine d'abord le programme pour déterminer les bibliothèques partagées dont il a besoin. Il recherche ensuite ces bibliothèques, les charge en mémoire et les lie à l'exécutable au moment de l'exécution. Ce faisant, le chargeur dynamique résout les références aux symboles, comme les références aux fonctions et aux variables, en s'assurant que tout est prêt pour l'exécution du programme. Compte tenu de son rôle, le chargeur dynamique est très sensible à la sécurité, car son code s'exécute avec des privilèges élevés lorsqu'un utilisateur local lance un programme set-user-ID ou set-group-ID.