使用 cat 从不受信任的文件中读取值是否存在风险

使用 cat 从不受信任的文件中读取值是否存在风险

我需要通过读取用户上传的文本文件来获取变量值。

我正在根据系统脚本执行操作:

resourceVersion=`cat userFile.txt`
mkdir $resourceVersion
...

当我稍后使用该$resourceVersion变量作为其他命令的参数时,该文件的内容是否会以任何方式损害系统?

答案1

编写安全代码的规则 1:你必须净化你的用户输入

至少传递--到你的 mkdir 子句以防止操作开关。

目前它可以用于在任意位置以任意权限创建目录。

就其本身而言,它可能不会导致违规,但你可以传递如下内容:

-m 0777 /var/lib/mysql/newdb

创建任何人都可以写入的新 mysql 数据库。

这里也可能存在拒绝服务攻击,因为每个空间都被视为一个新目录,因此您可以传递 32760 个新路径进行处理。

最后,一些伪文件系统对新目录的敏感程度可能超出您的预期。例如,在 Fedora 上,像 这样的目录/sys/fs/cgroup/newcgroup可能会创建一个新的 cgroup。此外,在 LIO 子系统中,将目录写入/sys/kernel/config/target可用于通过 iscsi 网络导出块设备(然后可以复制设备的全部内容)。

所以,不要这样做。

答案2

目前,如果 userFile.txt 包含以下内容,我可以添加一个全球可写的文件夹。-m 777 /.secretstorage
在我看来,这已经够糟糕了,不能使用这样的构造。

确实,使用您发布的当前脚本无法注入其他命令。
但根据您将使用此变量的其他命令,情况可能会变得更糟。
例如,如果您计划使用此变量在程序结束时进行清理,并且rm...

相关内容