Depuis la find
page de manuel :
-exec command ; There are unavoidable security problems surrounding use of the -exec action; you should use the -execdir option instead. -execdir command {} + Like -exec, but the specified command is run from the subdirectory containing the matched file, which is not normally the directory in which you started find. This a much more secure method for invoking commands, as it avoids race conditions during resolution of the paths to the matched files.
Qu'est-ce que ça veut dire? Pourquoi y a-t-il des conditions de concurrence avec son exécution à partir du répertoire de départ? Et comment sont ces risques de sécurité?
Réponses:
Trouvé les détails ici :
Je ne sais pas dans quelle mesure quelqu'un pourrait jamais exploiter cela; mais je suppose qu'il y a la réponse!
la source
execdir
serait d' abord chdir à/tmp/umsp
avant d' exécuter la commande, et ainsi théoriquement, le répertoire d'un attaquant re - lier aurait pas d' effet .. si l'édition de liens est passé après découverte « décide » d'évaluer ,-exec
mais avant que larm
commande peut faire son travail. Mais je me demande pourquoi cela ferait une différence: l'attaquant pourrait simplement faire le lien à nouveau après que l'utilisateur a décidé d'écrire lafind
commande./tmp/umsp
est un répertoire quandfind
il le voit, mais lors de sonrm
exécution, l'attaquant l'a changé en étant un lien symbolique vers/etc
./tmp/umsp/passwd
est un fichier normal tout au long, mais pas le même.Je crois que la raison pour laquelle
-exec
c'est dangereux est parce que si l'utilisateur ne spécifiait pas le nom complet et le chemin d'accès au programme à exécuter, il exécuterait potentiellement le mauvais programme.Exemple:
Dans
/some/path
, quelqu'un en a fait un autrecoolprogram
, et il télécharge toutes vos données vers un mauvais acteur.Mais attendez, dites-vous, ne devez-vous pas l'exécuter comme
./coolprogram
? Oui, mais certaines personnes l'ont faitPATH=.:/bin:whatever
, qui exécuteront le programme dans le répertoire courant.C'est probablement simplifié, mais je pense que cela pourrait être dangereux dans certains cas. J'ai dû résoudre un problème une fois où un octet zéro
cpio
s'est retrouvé dans le mauvais répertoire. Cela a provoqué un plantage du programme carcpio
il ne fonctionnait pas car il exécutait le fichier zéro octet dans le répertoire.la source
find -exec
. Si vous avez mis.
votre chemin, exécuter simplementcoolprogram
dans votre répertoire actuel est déjà dangereux, que vous lefind
fassiez ou non!The ‘-execdir’ action refuses to do anything if the current directory is included in the $PATH environment variable. This is necessary because ‘-execdir’ runs programs in the same directory in which it finds files – in general, such a directory might be writable by untrusted users. For similar reasons, ‘-execdir’ does not allow ‘{}’ to appear in the name of the command to be run.
.
chemin et{}
la commande. Peut-être qu'à l'avenir, Linux interdira.
complètement le chemin et les outils n'auront pas besoin d'implémenter leurs propres contrôles de sécurité! :)