原理

目前的 bash 使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以 (){ 开头定义的环境变量在命令 ENV 中解析成函数后,Bash 执行并未退出,而是继续解析并执行 shell 命令。

核心的原因在于在输入的过滤中没有严格限制边界,没有做合法化的参数判断。

要利用上述漏洞制造 RCE,必须要借助第三方服务程序作为媒介才能够实现,第三方服务程序也必须要满足众多条件才可以充当此媒介的角色。

利用

本地检测漏洞

env x='() { :;}; echo Vulnerable CVE-2014-6271' bash -c "echo test"

远程代码执行