Ree*_*osa 9 security bash environment-variables shellshock
据我了解,通常让任何人提供将存储在环境变量中的信息被认为是安全的。shellshock 漏洞在这里是一个问题,因为这意味着当 bash 的新实例启动时,环境变量中函数定义末尾的代码将被执行,并且您显然不希望任何人在您的服务器上运行他们喜欢的任何代码. 函数定义本身显然没有安全风险,并且被允许,因为必须显式调用它们才能执行它们的代码。
我的问题是为什么恶意用户不能简单地定义一个函数,将他们的恶意代码包含为一个通用命令ls,然后希望脚本(或正在运行的任何东西)在某个时候使用这个命令?
我想到的一个例子:
$ export ls='() { echo "doing bad things..."; }'
$ bash -c ls
doing bad things...
Run Code Online (Sandbox Code Playgroud)
phe*_*mer 10
这是一个安全风险。这通常就是您在切换到另一个上下文(系统的远程控制、更改用户等)时无法执行此操作的原因。
如果您有能力创建您想要的任何环境变量,那么您可以通过多种潜在方式执行任意代码。
以$LD_PRELOAD作为一个例子。如果您有能力设置该变量,您可以替换库函数,并将您的代码粘贴在那里。您可以设置$DISPLAY变量,并重定向程序连接到的 X 显示,以便您控制应用程序。
这就是为什么诸如sudo剥离所有变量的环境之类的事情。sudo只允许几个选择变量通过。对于这些变量,它会清理它们(它通过$TERM变量,但如果它包含不寻常的字符,则不会)。