tickets-perforatedSpecial Permissions

Les permissions Set User ID upon Execution (setuid) et Set Group ID (setgid) sont des mĂ©canismes Unix qui permettent Ă  un binaire d’ĂȘtre exĂ©cutĂ© avec les privilĂšges du propriĂ©taire (setuid) ou du groupe (setgid) du fichier, plutĂŽt qu’avec les privilĂšges de l’utilisateur appelant. Lorsqu’un binaire possĂšde le bit setuid, cela peut permettre Ă  un utilisateur d’exĂ©cuter ce programme avec des permissions Ă©levĂ©es (souvent root). Le bit setuid est reprĂ©sentĂ© par un s dans les permissions.


🔎 ÉnumĂ©ration des binaires setuid

Pour repérer des binaires setuid appartenant à root, on peut utiliser la commande suivante :

find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null

Il est possible de vouloir analyser ces binaires : dĂ©compiler, faire de la rĂ©tro-ingĂ©nierie, ou chercher des vulnĂ©rabilitĂ©s logiques (buffer overflow, format string, erreurs de validation d’arguments, etc.). Si une vulnĂ©rabilitĂ© est trouvĂ©e dans un binaire setuid, elle peut ĂȘtre exploitĂ©e pour escalader les privilĂšges.


🧭 Exemples d’applications setuid courantes

Certains programmes systĂšme et utilitaires installĂ©s par dĂ©faut possĂšdent parfois le bit setuid. PlutĂŽt que lister des exemples concrets (sorties), on retient que des programmes comme mount, su, ping, passwd, sudo, pkexec, etc. apparaissent souvent dans les inventaires — mais la prĂ©sence exacte dĂ©pend du systĂšme et de la distribution.


đŸ§© Setgid (Set Group ID)

La permission setgid permet d’exĂ©cuter un binaire avec les droits du groupe propriĂ©taire du fichier. Elle peut ĂȘtre utile pour accĂ©der Ă  des ressources restreintes au groupe. L’énumĂ©ration des fichiers setgid (ou combinĂ©s setuid+setgid) se fait avec :

find / -uid 0 -perm -6000 -type f 2>/dev/null

Un autre exemple d’énumĂ©ration ciblĂ©e :

find / -user root -perm -6000 -exec ls -ldb {} \; 2>/dev/null

đŸ› ïž Pourquoi c’est intĂ©ressant pour un attaquant

  • Surface d’attaque Ă©levĂ©e : les binaires setuid root exĂ©cutent du code avec privilĂšges Ă©levĂ©s et toute vulnĂ©rabilitĂ© peut conduire Ă  une escalade.

  • FonctionnalitĂ©s intĂ©grĂ©es : certains programmes offrent des options/func­tions permettant d’exĂ©cuter des commandes, d’éditer des fichiers, d’appeler des interprĂ©teurs (ex. via system(), popen(), plugins, hooks, scripts prĂ©-exĂ©cution).

  • PossibilitĂ©s d’abus : si le binaire accepte des entrĂ©es contrĂŽlĂ©es (noms de fichiers, variables d’environnement, arguments) sans validation stricte, elles peuvent ĂȘtre utilisĂ©es pour exĂ©cuter du code arbitraire.

Souvent, l’approche consiste à :

  1. récupérer le binaire setuid,

  2. l’analyser (strings, ltrace/strace en environnement sĂ©curisĂ©, reversing statique/dynamique),

  3. identifier un vecteur (injection d’argument, Ă©criture de fichier, chargement de librairie),

  4. développer un exploit local pour obtenir un shell ou une action privilégiée.


🔗 GTFOBins — catalogue d’abus connus

Le projet GTFOBinsarrow-up-right est une liste organisĂ©e de binaires et de techniques permettant d’abuser de fonctionnalitĂ©s lĂ©gitimes pour :

  • casser des environnements restreints,

  • Ă©lever des privilĂšges,

  • ouvrir des shells,

  • transfĂ©rer des fichiers.

Il est trĂšs utile de s’y rĂ©fĂ©rer lors d’un test d’intrusion pour identifier rapidement si un binaire prĂ©sent sur la machine offre une mĂ©thode d’abus.

Exemple pratique (commande utile Ă  connaĂźtre) :

Cette ligne montre comment apt-get (via une option Pre-Invoke) peut, dans certains contextes, exĂ©cuter /bin/sh avant l’action principale — si l’exĂ©cution se fait avec des privilĂšges Ă©levĂ©s, cela ouvre un shell privilĂ©giĂ©.


🧠 Bonnes pratiques pour les audits

  • Lister systĂ©matiquement les binaires setuid/setgid dĂšs l’accĂšs Ă  une machine (commande find ci-dessus).

  • Ne pas exĂ©cuter directement les binaires setuid sur une machine de production pour du reversing : effectuer le reversing dans un environnement isolĂ©/copied pour Ă©viter tout dommage.

  • Chercher des appels Ă  system(), popen(), dlopen() ou Ă  des charges dynamiques de bibliothĂšques — ce sont des points d’injection potentiels.

  • VĂ©rifier les variables d’environnement influant l’exĂ©cution (PATH, LD_PRELOAD, LD_LIBRARY_PATH, etc.) — certaines distributions empĂȘchent l’usage de LD_PRELOAD pour les binaires setuid, mais pas toutes.

  • Consulter GTFOBins pour des mĂ©thodes spĂ©cifiques Ă  chaque binaire connu.


đŸ›Ąïž Mesures d'attĂ©nuation pour les administrateurs

  • RĂ©duire le nombre de binaires setuid : n’appliquer le bit setuid que lorsque c’est strictement nĂ©cessaire.

  • Appliquer les correctifs et mises Ă  jour sur les packages systĂšme dĂšs que possible.

  • Restreindre le PATH et valider les variables d’environnement au dĂ©marrage des services.

  • Utiliser des mĂ©canismes de confinement (AppArmor, SELinux, namespaces, conteneurs) pour limiter l’impact d’un binaire compromis.

  • Auditer rĂ©guliĂšrement les permissions des fichiers et garder un inventaire des binaires sensibles.


📚 Ressources utiles


circle-info

SSH to 10.129.205.42 (ACADEMY-LPE-NIX02) with user "htb-student" and password "Academy_LLPE!"

Find a file with the setuid bit set that was not shown in the section command output (full path to the binary).

Á l'aide du cours ci-dessus nous utilisons la commande mise à disposition pour lister les différents programmes fonctionnants avec le setuid :

En comparant avec le retour fait dans le cours, nous pouvons observer que le chemin présent dans notre commande non présent dans le cours est le suivant :


Find a file with the setgid bit set that was not shown in the section command output (full path to the binary).

Á l'aide du cours ci-dessus nous utilisons la commande mise à disposition pour lister les différents programmes fonctionnants avec le setgid :

En comparant avec le retour fait dans le cours, nous pouvons observer que le chemin présent dans notre commande non présent dans le cours est le suivant :


Last updated