昨天,Bash曝出在调用环境变量设置命令或者接口时,可以任意执行Bash命令语句,绕过用户权限的限制。基本原理是:
$ env x='() { :;}; echo vulnerable'
如上bash脚本,本来只是定义一个环境变量x,但是其后面的内容全部都会被当作语句来执行,这也就是当以函数的形式来对环境变量来进行赋值时,会导致函数后面的命令被执行。即,env命令在执行赋值语句时未检查函数的边界,导致函数之后的内容也被执行。运行如上代码,屏幕如果显示“vulnearable”,那么系统的bash就存在该问题。目前确知的是,4.3版本之前的bash都存在该问题。该漏洞的代码为:CVE-2014-6271。
这个本身好像并没有多可怕的,因为一般能拿到shell,那么就有了整个环境的操纵权限,也不需要去用命令注入的方式来攻击了。但是存在一些场景允许远程执行Bash命令,正好又会在命令中调用环境变量设置函数。如CGI、DHCP等。