为什么对路径中的目录使用'-execdir'操作不安全?

αғsнιη

为什么不使用-execdirfind动作组合-exec却不安全呢?

当我运行以下命令时,我收到以下提示消息:

/path/to/currentDir/$ find . -type f -name 'partOfFileNames*' -execdir rm -- {} +

find: The current directory is included in the PATH environment variable, which is insecure 
in combination with the -execdir action of find.  Please remove the current directory 
from your $PATH (that is, remove "." or leading or trailing colons)

是什么导致此提示出现?

埃利亚·卡根(Eliah Kagan)

您可能运行了错误的程序。有人可以让您运行他们的程序。

-execdir操作从包含找到的文件的目录中运行命令。$PATH含有相对路径,如.或任何不下手/-execdir是不安全,因为其中的文件时发现一个目录(或其他目录解析相对于它)还可以包含一个可执行文件同名,你正在尝试的一个跑步。然后,该可能不受信任的可执行文件将开始运行。

这可能会被其他用户故意利用,从而导致您运行他们的程序,而不是您尝试运行的程序,这可能会损害或破坏数据安全性。或者,即使没有任何人试图使问题发生,它也可能会导致无意中运行错误的程序,这种情况很少见。

如果一切都在你的PATH环境变量是一个绝对路径,应该不会出现这种错误,即使目录你要搜索并-execdir从荷兰国际集团包含在PATH(我检查过是否可行。)如果您认为自己没有任何相对目录,$PATH但仍收到此错误,请使用包括的输出在内的详细信息更新您的问题echo "$PATH"

一个具体的例子。

作为可能出问题的示例,假设:

  • 爱丽丝有.她的$PATH,因为她希望能够运行在她的任何目录项目cd“d来,而不打扰与前面加上自己的名字./
  • 爱丽丝的疯狂夏娃已经/home/eve/shared与爱丽丝分享了。
  • 爱丽丝希望得到.c夏娃与她共享文件的统计信息(行,单词,字节)

因此,爱丽丝跑了:

find ~eve/shared -name \*.c -execdir wc {} \;

对于爱丽丝,不幸的是,夏娃创建了自己的脚本,对其进行了命名wc,将其设置为可执行文件(chmod +x),然后秘密地将其放置在的目录之一中/home/eve/shared夏娃的脚本看起来像这样:

#!/bin/sh
/usr/bin/wc "$@"
do_evil    # Eve replaces this command with whatver evil she wishes to do

因此,当Alice使用findwith与Eve共享的文件-execdir一起运行wc时,并且到达与Eve的自定义wc脚本位于同一目录中的文件时,Eve的wc运行-拥有Alice的所有特权!

wc出于谨慎,Eve使她的脚本充当系统的包装程序wc,因此Alice甚至都不知道出现了问题(即do_evil运行了该错误。),但是,更简单(也可能更复杂)的变体是可能的。 )

如何find防止这种情况。

find通过-execdir$PATH包含相对目录拒绝采取措施防止发生此安全问题

find 根据具体情况提供两种诊断消息。

  • 如果.在中$PATH,则(如您所见)它说:

    find: The current directory is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove the current directory from your $PATH (that is, remove "." or leading or trailing colons)

    对于这种.情况,它可能具有特殊的信息,因为它很常见。

  • 如果比其他相对路径.--say,foo在--appears$PATH并运行find-execdir,它说:

    find: The relative path `foo' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove that entry from $PATH

最好不要有相对路径$PATH

使用自动更改目录的实用程序时,拥有.或其他相对路径的风险$PATH特别高,这就是为什么find不允许您-execdir在这种情况下使用的风险

但是,尤其是.在您中拥有相对路径具有$PATH固有的风险,无论如何,实际上最好避免这样做。考虑上面示例中的虚构情况。假设findAlice不用运行只是运行cdS~eve/shared/blah并运行wc *.c如果blah包含Eve的wc脚本,do_evil则以Alice身份运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SecurityError:操作不安全。使用Htmlcanvas

什么是未经检查和不安全的操作?

SecurityError:canvas.toDataURL中的操作不安全

未经检查或不安全的操作而无需使用注释

编译警告:使用未经检查或不安全的操作

Android:使用未经检查或不安全的操作

Java程序使用未经检查或不安全的操作

为什么不安全。Sizeof被认为不安全?

为什么向上转换一个类被认为是不安全的操作?

为什么varargs(Class <?extends Throwable> ... t)是“未经检查或不安全”的操作?

为什么在不安全的操作之后而不是在整个forEach循环之后抛出ConcurrentModificationException?

为什么这不安全?

为什么`Rc`线程不安全?

为什么sql命令不安全?

为什么MAVLink协议不安全?

是什么导致javac发出“使用未经检查或不安全的操作”警告

macOS发现:“相对路径不安全”,为什么?

为什么不安全的代码上下文(与指针操作有关)在C#中存在安全风险?

如何避免EF Core中不安全的上下文操作?

jQuery 2.0.3错误-在Firefox中打破了fadeIn(),show()-SecurityError:操作不安全

“ SecurityError:操作不安全。” 在浏览器js中推送历史记录

在UIWebView的localStorage中存储数据时出现错误“ SecurityError(DOM异常18):操作不安全”

使用Canvas时是否可以避免“操作不安全”?

使用类属性作为键时,“此操作不安全”

Flutter插件:InAppPurchasePlugin.java使用未经检查或不安全的操作

Firestore 问题:CloudFirestorePlugin.java 使用未经检查或不安全的操作

Flutter Cloud Firestore 编译错误:CloudFirestorePlugin.java 使用未经检查或不安全的操作

java在hashmap和arraylist中使用不安全操作錯誤

为什么将组可写目录视为不安全?