转义 bash 变量以避免特权升级
Escaping bash variables to avoid privilege escalation
不,这不是 this and this 的副本。我有一个更具体的问题。
情况
我有一个根 bash 守护程序,它可以在目录中创建文件的符号链接。它获取每个文件的文件名并创建它的符号链接。当 web 用户可以将文件上传到其中的文件需要符号链接的文件夹时,问题就出现了(是的,这需要完成,不要 post 像这样的答案:"you shouldn't")。我担心的是,用户在创建文件名时可以获得 root 权限,这样他们就可以 'escape' 符号链接命令并以 root 身份执行代码。
我的问题
是否真的有可能在文件名(linux 文件名系统中允许的字符有限制)中制作这样的恶意负载以获得 root 升级?
Is it indeed possible to craft such a malicious payload in a filename [...] to get a root escalation?
第一步是运行任意命令;获得 root 升级是利用本地系统中单独的特权升级错误的问题,这有点超出了关于 bash.
的问题的范围
关于是否可以通过传递给 shell 脚本的数据 运行 任意命令:如果 shell 脚本编写正确则不能。如果它有任意的、可能有错误的内容,那么也许是这样。没有看到特定的脚本来审核,我们怎么说?
My concern is that users can get root privilege when they craft a filename in such a way that they can 'escape' the symlink command and execute code as root.
如果您的脚本编写正确,这是不可能的。
使用 --
防止名称被视为选项,使用双引号防止字符串拆分和 glob 扩展。
ln -- "$source" "$dest"
-s
和 -f
等参数必须位于 之前 --
,它断言所有后续参数都被解释为位置参数。
脚本的其他部分也相关:如果您正在解析 ls
,使用 eval
,或执行 eval
等效操作(例如扩展用户控制的变量在被视为脚本的字符串中;ssh
参数就是这样的一个例子;执行扩展的未引用的 heredocs 也是如此),这些可能会引入漏洞。
也就是说:有很多事情可以做对(或做错),我们需要查看您的代码以对其进行审核。并不是说 Whosebug 是合适的地方——也许是 Code Review StackExchange 站点?请确保 运行 内容通过 http://shellcheck.net/,然后再提交给人工审核。
不,这不是 this and this 的副本。我有一个更具体的问题。
情况
我有一个根 bash 守护程序,它可以在目录中创建文件的符号链接。它获取每个文件的文件名并创建它的符号链接。当 web 用户可以将文件上传到其中的文件需要符号链接的文件夹时,问题就出现了(是的,这需要完成,不要 post 像这样的答案:"you shouldn't")。我担心的是,用户在创建文件名时可以获得 root 权限,这样他们就可以 'escape' 符号链接命令并以 root 身份执行代码。
我的问题
是否真的有可能在文件名(linux 文件名系统中允许的字符有限制)中制作这样的恶意负载以获得 root 升级?
Is it indeed possible to craft such a malicious payload in a filename [...] to get a root escalation?
第一步是运行任意命令;获得 root 升级是利用本地系统中单独的特权升级错误的问题,这有点超出了关于 bash.
的问题的范围关于是否可以通过传递给 shell 脚本的数据 运行 任意命令:如果 shell 脚本编写正确则不能。如果它有任意的、可能有错误的内容,那么也许是这样。没有看到特定的脚本来审核,我们怎么说?
My concern is that users can get root privilege when they craft a filename in such a way that they can 'escape' the symlink command and execute code as root.
如果您的脚本编写正确,这是不可能的。
使用 --
防止名称被视为选项,使用双引号防止字符串拆分和 glob 扩展。
ln -- "$source" "$dest"
-s
和 -f
等参数必须位于 之前 --
,它断言所有后续参数都被解释为位置参数。
脚本的其他部分也相关:如果您正在解析 ls
,使用 eval
,或执行 eval
等效操作(例如扩展用户控制的变量在被视为脚本的字符串中;ssh
参数就是这样的一个例子;执行扩展的未引用的 heredocs 也是如此),这些可能会引入漏洞。
也就是说:有很多事情可以做对(或做错),我们需要查看您的代码以对其进行审核。并不是说 Whosebug 是合适的地方——也许是 Code Review StackExchange 站点?请确保 运行 内容通过 http://shellcheck.net/,然后再提交给人工审核。