CVSS 10.0。Bash 在环境变量中的函数定义之后错误地解析后续命令,并在 shell 初始化时执行它们。
Bash 环境变量可以编码函数定义: x='() { :; }' 当 Bash 将此作为环境变量导入并初始化时,它会解析函数体,但在结束花括号后未能停止解析,从而执行其后任意文本作为命令。
docker build -t shellshock-poc .
docker run --rm -it shellshock-poc env x='() { :;}; echo VULNERABLE' bash -c "echo test"
VULNERABLE test
[patched Dockerfile / output here]
调用 Bash 且攻击者可控头部(如 User-Agent)的 CGI 脚本将这些头部设置为环境变量——攻击者可控的环境变量到达 Bash 初始化过程才是实际攻击面,而不仅仅是交互式 shell 使用。
上游补丁强制在函数定义的结束花括号处停止解析。CVE-2014-7169 涵盖了对后续不完整补丁的绕过。