Programmez! #239 PDF pour nos abonnés papier

Abonnés papier : en raison de la situation due au coronavirus, des retards sont à prévoir en ce qui concerne la distribution de Programmez! #239 par La Poste. C'est pourquoi nous mettons Programmez! #239 PDF à disposition dans votre compte utilisateur sous un onglet dédié en attendant. Pour y accéder, il vous suffit de saisir votre n° d'abonné (ou éventuellement le ressaisir comme pour l'accès aux archives) dans votre compte utilisateur, si ce n'est pas déjà fait. Si vous ne connaissez par votre numéro d'abonné, vous pouvez l'obtenir à cette page.

En cas de difficultés, contactez le webmaster à partir du formulaire de contact de ce site.

UNIX/Linux : une grave faille trouvée dans la commande sudo !

Par:
fredericmazue

mar, 15/10/2019 - 13:22

Avis aux administrateurs système Linux ou de tout type UNIX, vous êtes vulnérables si vous accordez des privilèges à vos utilisateurs via la commande sudo.

Pour mémoire, sudo permet d'accorder des droits particuliers à des utilisateurs ou des groupes d'utilisateurs, pour exécuter une commande qui requiert ces droits.

Supposons que nous voulions accorder à fred le droit d'éditer des fichiers, par exemple de configuration, appartenant à d'autres utilisateurs. On peut écrire ceci dans sudoers, le fichiers de configuration de sudo :

fred = (ALL) /usr/bin/emacs

Cette ligne dit que fred peut endosser les droits de n'importe quel utilisateur (ALL) , y compris root. Mais nous ne voulons pas que fred puisse modifier les fichiers de configuration du système, donc nous allons préciser qu'il ne peut pas endosser les droits de root :

fred = (ALL, !root) /usr/bin/emacs

Ce qui serait parfait, n'était la faille de sécurité découverte par Joe Vennix  d'Apple Information Security.

Le problème se situe dans le mot ALL qui dit "n'importe quel" utilisateur. Ceux qui cherchent à exploiter des failles de sécurité savent bien qu'il est souvent juteux de remplacer "n'importe quel" par "n'importe quoi" et c'est le cas ici.

En spécifiant un utilisateur d'id -1 (ce qui normalement n'existe pas dans le système), ou 4294967295, ce qui revient au même car cette valeur vaut FFFFFFFF en hexadécimal, soit -1 codé sur 32 bits, sudo perd les pédales.

sudo fonctionne lui même avec l'id 0 (root) et change cette valeur lorsqu'il s'exécute selon les droits qu'il doit accorder. Mais la valeur -1 le fait dérailler comme nous l'avons dit et l'id reste 0

On peut donc attaquer ainsi

sudo u#-1 /usr/bin/emacs

ou

sudo -u#4294967295/usr/bin/emacs

et l'on obtient la possibilité de modifier n'importe quel fichier du système. (Remarque : avec certains shells, il peut être nécessaire d'échapper le caractère # avec \)

Vous pouvez vérifier que vous êtes vulnérables en lançant la command id avec sudo. Pour mémoire id affiche l'identifiant de l'utilisateur :

sudo -u #-1 id -u

Cette commande devrait afficher -1, ou sudo devrait émettre un message d'erreur. Mais le résultat est bien et bien 0 : -1 est devenu root.

Toutes les grandes distributions Linux sont en train de publier des correctifs. Ne tardez pas à les appliquer. Et en attendant, retirez les droits des sudoers !