使用“find -exec”有哪些安全问题和竞争条件?

使用“find -exec”有哪些安全问题和竞争条件?

来自find手册页:

-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.

这是什么意思?为什么从起始目录运行它会出现竞争条件?这些安全风险如何?

答案1

找到了详细信息这里:

-exec操作会导致另一个程序运行。它将当时正在考虑的文件的名称传递给程序。然后,被调用的程序通常会对该文件执行某些操作。再次,这里存在可以利用的竞争条件。我们以命令为例

 find /tmp -path /tmp/umsp/passwd -exec /bin/rm

在这个简单的示例中,我们仅识别一个要删除的文件并调用 /bin/rm将其删除。存在问题是因为 find 决定需要处理操作的时间点 -exec与命令/bin/rm实际发出 unlink() 系统调用以从文件系统中删除文件的时间点之间存在时间间隔。在此时间段内,攻击者可以重命名该/tmp/umsp 目录,将其替换为/etc.无法/bin/rm确定它正在处理 find 所考虑的同一个文件。一旦符号链接到位,攻击者就会说服 find 导致文件删除/etc/passwd,这并不是实际调用的命令所预期的效果。

不确定有人可以利用这个漏洞的可能性有多大;但我想答案就在那里!

答案2

我认为之所以-exec危险是因为如果用户不指定要执行的程序的全名和路径,则可能会执行错误的程序。

例子:

find /some/path -exec coolprogram

在 中/some/path,有人制作了另一个coolprogram,并将您的所有数据上传给了某个坏人。

但是等等,你说,你不需要执行它吗./coolprogram?是的,但是有些人有PATH=.:/bin:whatever,它会执行当前目录中的程序。

这可能是简化的,但我认为在某些情况下可能会很危险。有一次,我必须解决一个零字节cpio出现在错误目录中的问题。它导致程序崩溃,因为cpio它在目录中运行零字节文件时无法工作。

相关内容