相关疑难解决方法(0)

是否记录了Bash中的Shellshock漏洞背后的行为或者是故意的?

最近披露Bash如何解释环境变量的漏洞CVE-2014-6271.该漏洞依赖于Bash将一些环境变量声明解析为函数定义,但随后继续按照定义执行代码:

$ x='() { echo i do nothing; }; echo vulnerable' bash -c ':'
vulnerable
Run Code Online (Sandbox Code Playgroud)

但我不明白.我在Bash手册中找不到任何关于将环境变量解释为函数的内容(除了继承函数,这是不同的).实际上,正确命名的函数定义只被视为一个值:

$ x='y() { :; }' bash -c 'echo $x'
y() { :; }
Run Code Online (Sandbox Code Playgroud)

但腐败的人什么都不打印:

$ x='() { :; }' bash -c 'echo $x'

$ # Nothing but newline
Run Code Online (Sandbox Code Playgroud)

损坏的函数是未命名的,因此我不能只调用它.这个漏洞是一个纯粹的实现错误,还是这里有一个预期的功能,我看不到?

更新

Per Barmar的评论,我假设函数的名称是参数名称:

$ n='() { echo wat; }' bash -c 'n'
wat
Run Code Online (Sandbox Code Playgroud)

我之前发誓我可以发誓,但我想我没有努力.它现在可以重复了.这是一个更多的测试:

$ env n='() { echo wat; }; echo vuln' bash -c 'n'
vuln …
Run Code Online (Sandbox Code Playgroud)

security bash function environment-variables shellshock-bash-bug

56
推荐指数
3
解决办法
5199
查看次数