Bash 或Bourne again shell,是一个类UNIX shell 脚本,可能是Linux系统中最常见的安装组件。从1980年诞生到现在,bash 已经从一个简单的基于终端的命令解释器演进到诸多其他的奇特用途。
在Linux中,变量影响着系统软件。它们都是由一个名称和对名称的赋值构成。bash shell也是如此。在程序后台运行bash shell很常见。通常用于向远程用户提供一个shell(例如通过ssh,telnet),为CGI脚本提供解析器(例如Apache),甚至提供有限的命令执行支持(例如git)。
回到正题,你可以在调用bash shell前使用特殊加工的值创建变量,这个事实了系统的脆弱。这些变量可以包含代码,随着shell调用执行。这些加工过的变量名并没有什么,主要是它们的内容。在以下的语境中,脆弱无遗:
sshd配置中使用的ForceCommands变量用来向远程用户提供有限的命令执行权限。这个缺陷可以被绕过并提供任意的命令执行权限。一些Git和Subversion部署使用这样的shell。OpenSSH的常规使用不受影响,因为用户已经进入了shell。
任意可能陷入shell险境的其他应用,或是运行shell脚本将bash作为解释器的应用。不引入变量的shell脚本是安全的,即使它们处理不安全的内容并存储在(不引入的)shell变量里并打开子shell。
延伸内容:
网友评论 ()条 查看