lock-openSudo Rights Abuse

Les privilèges sudo peuvent être accordés à un compte, permettant à ce compte d'exécuter certaines commandes dans le contexte de root (ou d'un autre compte) sans changer d'utilisateur ni recevoir des privilèges excessifs. Lorsque la commande sudo est lancée, le système vérifie si l'utilisateur dispose des droits configurés dans /etc/sudoers.

Lors de la prise d'accès à une machine, il est essentiel de vérifier si l'utilisateur courant possède des privilèges sudo :

$ sudo -l

Matching Defaults entries for sysadm on NIX02:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User sysadm may run the following commands on NIX02:
    (root) NOPASSWD: /usr/sbin/tcpdump

Parfois, lister les droits sudo demande le mot de passe de l'utilisateur. Cependant, les entrées contenant NOPASSWD peuvent être affichées sans fournir de mot de passe.


⚠️ Mauvaise configuration courante

Une mauvaise configuration fréquente est d'accorder des droits root sans mot de passe (NOPASSWD) ou de définir une commande trop permissive (par exemple en n'imposant pas un chemin absolu ou en autorisant des options dangereuses). Ces erreurs peuvent être exploitées pour exécuter des commandes non prévues et obtenir une élévation de privilèges.

Exemple : tcpdump avec NOPASSWD

Si un utilisateur est autorisé à exécuter tcpdump en tant que root sans mot de passe, il est possible d'abuser d'options avancées de tcpdump (comme -z) qui exécutent une commande après rotation de fichiers :

$ man tcpdump

[...]
-z postrotate-command              

Used in conjunction with the -C or -G options, this will make `tcpdump` run " postrotate-command file " where the file is the savefile being closed after each rotation. For example, specifying -z gzip or -z bzip2 will compress each savefile using gzip or bzip2.

L'option pertinente est :

  • -z postrotate-command : utilisée avec -C ou -G, elle permet d'exécuter postrotate-command file après rotation du fichier.

En créant un script exécutable contenant une payload (par exemple un reverse shell) et en passant ce script à tcpdump via l'option -z, tcpdump exécutera ce script avec les privilèges du processus (root si sudo est utilisé).

Exemple de script :

Exemple d'exécution via sudo :

Note : certaines distributions récentes (ou configurations AppArmorarrow-up-right/SELinux) restreignent les commandes utilisables avec -z, empêchant ainsi l'exécution arbitraire. Toujours tester dans un environnement contrôlé.


🧭 Vérification des droits sudo

Pour rechercher rapidement des droits sudo pertinents :

Chercher ensuite des commandes autorisées listées avec NOPASSWD ou des chemins non absolus.


🛠️ Techniques d'abus courantes

  • Options des programmes : certaines applications disposent d'options qui permettent d'exécuter des commandes (ex : tcpdump -z, apt-get -o APT::Update::Pre-Invoke::=/bin/sh, etc.).

  • Path abuse : si sudoers autorise cat sans chemin absolu, un binaire malveillant dans un répertoire placé avant /bin dans PATH pourrait être exécuté.

  • Fichiers temporaires / scripts : soumettre un script exécutable dans /tmp et le référencer via une option d'un binaire autorisé.

Exemple (apt-get pre-invoke) :


🛡️ Bonnes pratiques pour réduire les risques

  1. Spécifier le chemin absolu des binaires dans /etc/sudoers (ex: /usr/sbin/tcpdump plutôt que tcpdump).

  2. Accorder les droits sudo avec parcimonie, selon le principe du moindre privilège : limiter les utilisateurs aux commandes strictement nécessaires.

  3. Éviter d'utiliser NOPASSWD sauf pour des cas très contrôlés.

  4. Auditer régulièrement /etc/sudoers et les fichiers sous /etc/sudoers.d/ pour détecter des entrées trop larges.

  5. Restreindre les options des commandes si possible (via wrappers) et contrôler les variables d'environnement (PATH, LD_*).

  6. Utiliser des mécanismes de confinement (AppArmorarrow-up-right, SELinux) pour limiter l'impact d'une commande autorisée.


circle-info

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

What command can the htb-student user run as root?

Afin de trouver la commande que l'utilisateur htb-student peut exécuter en tant que sudo, nous utilisons la commande suivante :

L'utilisation de sudo -l nous permet de voir que notre utilisateur actuel peut exécuter la commande /usr/bin/openssl en tant que root.

Last updated