Von der find
Manpage :
-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.
Was bedeutet das? Warum gibt es Wettkampfbedingungen, wenn Sie es aus dem Startverzeichnis ausführen? Und wie sind diese Sicherheitsrisiken?
Antworten:
Fand die Details hier :
Ich bin nicht sicher, wie wahrscheinlich es ist, dass jemand dies jemals ausnutzen kann. Aber ich denke, es gibt die Antwort!
quelle
execdir
würde zuerst Chdir zu ,/tmp/umsp
bevor der Befehl ausgeführt wird , und so theoretisch ein erneutes Verknüpfen des Angreifers würde das Verzeichnis keine Wirkung hat .. wenn die Neuverknüpfung nach Entdeckung geschähe „entscheidet“ zu bewerten ,-exec
aber vor demrm
Befehl kann seine Arbeit tun. Aber ich frage mich, warum dies einen Unterschied machen würde: Der Angreifer könnte einfach den Relink durchführen, nachdem der Benutzer beschlossen hat, denfind
Befehl zu schreiben ./tmp/umsp
ist ein Verzeichnis, wenn esfind
angezeigt wird, aber wenn es ausgeführt wirdrm
, hat der Angegriffene es in eine symbolische Verknüpfung zu geändert/etc
./tmp/umsp/passwd
ist eine normale Datei, aber nicht dieselbe.Ich glaube, der Grund, warum dies
-exec
gefährlich ist, liegt darin, dass der Benutzer möglicherweise das falsche Programm ausführt, wenn er nicht den vollständigen Namen und den Pfad des auszuführenden Programms angibt.Beispiel:
In
/some/path
hat jemand einen anderen gemachtcoolprogram
, und er lädt alle Ihre Daten zu einem schlechten Schauspieler hoch.Aber warte, sagst du, musst du es nicht so ausführen
./coolprogram
? Ja, aber einige Leute habenPATH=.:/bin:whatever
, die das Programm im aktuellen Verzeichnis ausführen.Dies ist wahrscheinlich vereinfacht, aber ich denke, dass es in einigen Fällen gefährlich sein könnte. Ich musste ein Problem beheben, bei dem ein Null-Byte
cpio
im falschen Verzeichnis landete. Ein Programm stürzte ab, weilcpio
es nicht funktionierte, da die Null-Byte-Datei im Verzeichnis ausgeführt wurde.quelle
find -exec
. Wenn Sie.
Ihren Weg eingeschlagen haben, ist die Ausführungcoolprogram
in Ihrem aktuellen Verzeichnis bereits gefährlich, unabhängig davon, ob Sie diesfind
tun oder nicht!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.
.
und Befehlen betrifft{}
. Vielleicht verbietet Linux in Zukunft die.
vollständige Pfadangabe und die Tools müssen keine eigenen Sicherheitsprüfungen durchführen! :)