veilletech.fr
26 oct. Feed du jour
#05 SÉCURITÉ Faille

wordexp(3) : le drapeau NOCMD ne suffit pas

Un drapeau de sécurité qui dépend de la libc n'est pas une garantie.

La fonction POSIX wordexp(3), souvent recommandée pour développer le tilde, exécute des commandes par défaut : une chaîne contenant $(whoami) suffit. Le drapeau WRDE_NOCMD ne protège pas partout, car musl et macOS délèguent au shell avec un filtre incomplet. À ne pas utiliser sur une entrée non fiable.

1 min de lectureavancévidéo 1:20
Partager
Sommaire4 sections
  1. Ce qui se passe
  2. Le drapeau qui ne suffit pas
  3. À faire
  4. À retenir

Ce qui se passe

wordexp(3), fonction POSIX d'expansion « à la shell », est souvent conseillée pour transformer ~/foo en /home/moi/foo. Avec le drapeau 0, toutes les expansions sont actives, substitution de commande comprise :

C
wordexp("$(cat /etc/passwd)/foo", &p, 0);  /* lance cat */

Le drapeau qui ne suffit pas

WRDE_NOCMD interdit les commandes, mais seulement si la libc le fait bien :

À faire

Ne pas appeler wordexp sur une entrée non fiable, même avec WRDE_NOCMD. Pour le seul tilde, une piste de notre part : lire HOME et remplacer soi-même le préfixe ~/.

Source : yossarian.net, 25 octobre 2026. Source en anglais. Contournement macOS : Julian Squires.