linuxCapabilities

Les Linux capabilities sont un mécanisme de sécurité permettant d’accorder des privilèges fins à des processus sans leur donner l’intégralité des droits du compte root. Plutôt que d’utiliser exclusivement le modèle Unix traditionnel (UID 0 = root), on peut déléguer des droits spécifiques (ex : binding sur des ports basses, montage de systèmes de fichiers) à des exécutables via des capabilities.


🔐 Principe et risques

Les capabilities permettent une approche plus granulaire de la sécurité, mais peuvent être mal utilisées :

  • Sur-privilegier un binaire (ajouter des capabilities trop larges) augmente la surface d’attaque.

  • Attribuer des capabilities à des exécutables non isolés (non sandboxés) permet à un attaquant d’exploiter ces droits pour escalader.

Certaines capabilities sont particulièrement dangereuses si elles sont présentes sur des binaires accessibles :

  • cap_sys_admin — très puissante, couvre de nombreuses opérations système.

  • cap_dac_override — permet de bypasser les contrôles d’accès (lecture/écriture/exécution) sur les fichiers.

  • cap_setuid / cap_setgid — permettent de modifier l’UID/GID effectif d’un processus.


⚙️ Définir une capability

Sur Ubuntu (et autres distributions utilisant libcap), on peut utiliser setcap :

sudo setcap cap_net_bind_service=+ep /usr/bin/vim.basic

Ce type de commande accorde la capability cap_net_bind_service à l’exécutable écrit en paramètre. Les flags usuels sont expliqués ci-dessous.


🧾 Valeurs et flags utilisés avec setcap

  • = : définit la valeur (utile pour enlever une capability).

  • +ep : ajoute la capability dans les permitted et effective sets.

  • +ei : ajoute la capability dans les sets effective et inheritable.

  • +p : ajoute la capability uniquement dans le permitted set.

Exemples :


🔎 Liste de capabilities courantes et leur signification

Capability
Description

cap_sys_admin

Très large : actions administratives diverses (montage, configuration, etc.).

cap_sys_chroot

Permet de changer le root (chroot).

cap_sys_ptrace

Autorise l’attachement/débogage d’autres processus.

cap_sys_nice

Modifier la priorité des processus.

cap_sys_time

Modifier l’horloge système.

cap_sys_resource

Modifier les limites de ressources (ulimit).

cap_sys_module

Charger / décharger des modules noyau.

cap_net_bind_service

Autorise le binding sur des ports privilégiés (<1024).

cap_setuid

Permet de définir l’UID effectif.

cap_setgid

Permet de définir le GID effectif.

cap_dac_override

Bypass des permissions DAC (lecture/écriture/exécution).


🔍 Énumérer les capabilities sur le système

Pour rechercher les exécutables équipés de capabilities :

La sortie (exemples) peut être de la forme :


🛠️ Exploitation — cas pratique

Si un binaire possède cap_dac_override (ou d’autres capabilities puissantes) et est exécutable par un utilisateur non privilégié, il peut permettre de modifier des fichiers système ou d’accéder à des ressources normalement restreintes.

Pattern d’exploitation (exemple pédagogique) :

  1. Détecter un binaire avec getcap :

  1. Utiliser le binaire pour éditer un fichier système (ex : /etc/passwd) :

  1. Ou, en non-interactif (batch), appliquer des modifications via l’entrée standard :

Remarque : cet exemple montre comment, en utilisant cap_dac_override, on peut modifier /etc/passwd pour supprimer le mot de passe du compte root (attention aux implications et n’utiliser que dans des environnements de test autorisés).


🧰 Recommandations pour les audits

  • Lister régulièrement les exécutables avec capabilities (getcap) lors d’un accès initial.

  • Analyser le besoin opérationnel de chaque capability : pourquoi ce binaire a-t-il été doté de ce droit ?

  • Préférer des mécanismes sandboxés (namespaces, seccomp) quand une application a besoin d’un droit précis.

  • Éviter d’attribuer cap_sys_admin sauf cas très justifiés.

  • Vérifier si la distribution neutralise certains vecteurs (par ex. certains noyaux ou polices de sécurité empêchent l’usage de LD_PRELOAD sur binaires avec capabilities).


🛡️ Mesures d'atténuation

  • Restreindre l’utilisation de setcap aux administrateurs.

  • Documenter et inventorier toutes les capabilities déployées.

  • Appliquer le principe du moindre privilège et retirer les capabilities inutiles.

  • Utiliser des contrôles d’intégrité (AIDE, tripwire) pour détecter tout changement d’attributs sur les binaires.


📚 Ressources utiles


circle-info

SSH to 10.129.205.111 (ACADEMY-LLPE-CAP) with user "htb-student" and password "HTB_@cademy_stdnt!"

Escalate the privileges using capabilities and read the flag.txt file in the "/root" directory. Submit its contents as the answer.

Nous nous connectons dans un premier temps à notre cible :

Nous listons alors les capabilities disponibles pour l'utilisateur actuel :

Nous pouvons alors observer la capability cap_dac_override+eip, comme vu dans le cours.

Nous savons donc que le but est d'écrire dans le fichier /etc/passwd afin de retirer le mot de passe assogné à l'utilisteur root :

Nous sommes maintenant root.

Nous pouvons alors afficher le contenu du fichier flag.txt afin d'en récupérer le contenu :

Nous obtenons ainsi le flag attendu :


Last updated