我有一个root bash守护程序,可以在目录中创建文件的符号链接。它获取每个文件的文件名并创建它的符号链接。当网络用户可以将文件上传到需要对其进行符号链接的文件夹时,就会出现问题(是的,这需要做,不要发布像“你不应该”这样的答案)。我担心的是,用户在创建文件名时可以获得root权限,这样他们就可以“逃避”symlink命令并以root身份执行代码。
是否确实可以在文件名中创建这样的恶意有效负载(在linux文件名系统中允许的字符数限制)来获得root升级?
答案 0 :(得分:2)
是否确实可以在文件名[...]中制作这样的恶意有效负载以获得根升级?
第一步是运行任意命令;然后获得根升级是一个在本地系统中利用单独的权限提升错误的问题,这对于关于bash的问题来说有点超出范围。
关于是否可以通过传递给shell脚本的数据运行任意命令:如果shell脚本写得正确则不行。如果它有任意的,可能有错误的内容,那么也许如此。没有看到要审核的特定脚本,我们该怎么说?
我担心的是,用户在创建文件名时可以获得root权限,以便他们可以“逃避”symlink命令并以root身份执行代码。
如果您的脚本写得正确,则无法执行此操作。
使用--
来防止将名称视为选项,使用双引号来防止字符串拆分和全局扩展。
ln -- "$source" "$dest"
-s
和-f
之类的参数必须在--
之前,这声明所有后续参数都被解释为位置。
脚本的其他部分也是相关的:如果您正在解析ls
,使用eval
或执行eval
- 等效操作(例如在字符串中扩展用户控制的变量)被视为脚本; ssh
参数是这样的一个例子;因此,未引用的heredocs执行扩展),这些可能会引入漏洞。
这就是说:有很多事情可以正确(或错误),我们需要看到你的代码来审核它。不是说StackOverflow是正确的地方 - 也许是Code Review StackExchange网站?在提交内容之前,请务必通过http://shellcheck.net/运行内容。