cards-blankWildcard Abuse

Les caractères génériques (wildcards) peuvent être utilisés comme remplacements pour d'autres caractères et sont interprétés par le shell avant d'autres actions. Une mauvaise gestion de ces caractères peut conduire à des escalades de privilèges lorsqu'ils sont utilisés dans des scripts automatisés ou des tâches planifiées.


🔎 Signification des caractères génériques

Caractère
Signification

*

Un astérisque qui peut correspondre à n'importe quel nombre de caractères dans un nom de fichier.

?

Correspond à un seul caractère.

[ ]

Les crochets englobent des caractères et peuvent correspondre à n'importe lequel d'entre eux à la position définie.

~

Un tilde en début de chaîne se développe vers le répertoire personnel de l'utilisateur courant ou ~user vers celui d'un autre utilisateur.

-

Un tiret à l'intérieur des crochets indique une plage de caractères.


⚙️ Exemple d'abus : la commande tar

La commande tar est couramment utilisée pour créer ou extraire des archives. Certaines options de tar acceptent des actions exécutables via la ligne de commande. Si des noms de fichiers créés par un utilisateur sont interprétés comme options par tar, il est possible d'exécuter du code arbitraire.

Dans la page de manuel de tar, on trouve des options relatives aux points de contrôle :

$ man tar

[...]

Informative output
       --checkpoint[=N]
              Display progress messages every Nth record (default 10).

       --checkpoint-action=ACTION
              Run ACTION on each checkpoint.
              
[...]

Les options intéressantes ici sont :

  • --checkpoint[=N] : affiche des messages de progression tous les N-èmes enregistrements (par défaut 10).

  • --checkpoint-action=ACTION : exécute ACTION à chaque point de contrôle. ACTION peut être exec=COMMAND, ce qui exécute une commande système.

Si des fichiers portant des noms ressemblant à ces options sont présents dans le répertoire, et que tar est lancé avec un wildcard (*), alors ces noms seront développés par le shell et passés comme options à tar.


⚙️ Scénario concret (cron)

Considérons une tâche cron configurée pour sauvegarder le contenu de /home/htb-student et créer une archive compressée dans /home/htb-student. Cette tâche s'exécute toutes les minutes — un bon candidat pour une escalade de privilèges si elle est vulnérable.

Contenu du cron (ligne) :

Nous pouvons abuser du wildcard en créant des fichiers dont les noms vont être interprétés par tar comme options. En pratique, on crée :

Ces fichiers portent exactement les noms d'options que tar reconnaît. Lorsque la tâche cron s'exécute et que * est développé, tar reçoit --checkpoint=1 et --checkpoint-action=exec=sh root.sh comme arguments et exécutera sh root.sh.


🔐 Conséquence

Après exécution, le script root.sh aura été lancé par tar avec les privilèges du processus qui exécute la tâche (souvent root dans le cas d'une sauvegarde système). Le fichier root.sh peut alors modifier /etc/sudoers ou effectuer toute autre modification privilégiée, aboutissant à une escalade de privilèges.

Par exemple, ajouter une ligne permettant à l'utilisateur htb-student d'exécuter toutes les commandes sans mot de passe :


⚠️ Conditions requises pour l'exploitation

  • La tâche automatisée (cron, script de sauvegarde, etc.) doit utiliser un wildcard (*) ou accepter des fichiers depuis un répertoire contrôlé par un attaquant.

  • La commande utilisée doit interpréter certaines chaînes de caractères dans les arguments (comme tar interprétant --checkpoint-action).

  • L'attaquant doit être capable d'écrire des fichiers dans le répertoire depuis lequel la commande listera les fichiers.

  • Le processus vulnérable s'exécute avec des privilèges plus élevés (ex. root) ou peut déclencher une modification de ressources sensibles.


🛡️ Mesures d'atténuation

  • Ne jamais lancer de commandes sensibles avec des wildcards provenant de répertoires accessibles en écriture par des utilisateurs non fiables.

  • Utiliser des chemins explicites plutôt que * : lister et filtrer les fichiers de manière contrôlée (par exemple via find avec validation des noms) avant de les passer à une commande.

  • Sanitiser et valider les noms de fichiers si l'input utilisateur est possible.

  • Exécuter les tâches planifiées avec un compte à privilèges minimum. Éviter d'exécuter des sauvegardes ou des scripts de maintenance en tant que root lorsque cela n'est pas strictement nécessaire.

  • Utiliser des options de commande sûres : par exemple, invoquer tar avec -- pour indiquer la fin des options (si applicable) et empêcher l'interprétation des noms commençant par - comme options : tar -zcf archive.tar.gz -- * (note : selon la version de tar et le comportement, ceci peut varier — tester en environnement contrôlé).

  • Configurer correctement les permissions des répertoires partagés. Empêcher les utilisateurs non autorisés d'écrire dans des répertoires utilisés par des scripts exécutés avec des privilèges élevés.


Last updated