Answers:
不,它不会影响ZSH。
您仍然必须更新bash,因为大多数系统脚本都是为bash编写的,并且容易受到shellshock错误的攻击。
要测试您的ZSH,请执行以下操作:
env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
该代码的作用是什么?
env x='() { :;}; echo vulnerable'
使用变量末尾的命令创建具有已知错误的环境变量zsh -c 'echo hello'
使用简单的hello启动ZSH Shell(并评估所有环境变量,包括x)如果看到输出:
vulnerable
hello
然后,您的ZSH容易受到攻击。我的(5.0.2)不是:
$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello
bash
对于系统实用程序是个坏习惯,因为不能保证会安装bash。/bin/sh
是标准外壳程序,必须是正确的POSIX Shell解释程序。
env x='() { :;}; echo vulnerable' sh -c 'echo hello'
从此链接:
通过执行以下测试,可以确定您是否容易受到CVE-2014-6271中的原始问题的影响:
env x='() { :;}; echo vulnerable' bash -c 'echo hello'
如果在该命令的输出中看到弱词一词,则表示bash易受攻击,您应该进行更新。以下是来自OS X 10.8.5的易受攻击的版本:
env x='() { :;}; echo vulnerable' bash -c 'echo hello'
vulnerable
hello
以下输出是非脆弱bash版本的示例。
$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
env X='() { (a)=>\' bash -c "echo date"
将在经过修补的bash上并且尽管抛出很多错误,但仍会生成一个名为的文件echo
,其中包含日期。我不想知道为什么
zsh
根本不使用bash
。bash
在您的示例中被明确调用。使用哪个shell运行这些行都没有关系。此漏洞影响新启动的bash shell,而不影响运行它的shell。
bash
示例$SHELL
。
它不会zsh
作为shell可执行文件起作用,因为它的源代码从不包含该错误。和
之间有许多相似之处,但它们是彼此独立实现的。可以通过两种不同的方式来实现相同的功能,并且在这种情况下更重要的是通常具有不同的错误。bash
zsh
间接的影响与zsh
在终端中与外壳进行交互工作几乎一样bash
。
的使用bash
是如此普遍,以至于人们几乎无法避免调用它。
zsh
但实际上包含的脚本bash
。 #!/bin/bash
用于指定bash
为解释器的shell脚本。您假定的许多命令都是二进制文件,但它们是Shell脚本,其中一些使用bash
。
在显式执行Shell的许多地方,bash
可能会使用,甚至可能需要这样做。
xargs
命令或git
涉及参数的别名不,Shellshock不会直接影响zsh。
但是,许多使用zsh作为默认Shell的环境也安装了bash。包括zsh在内的任何shell均可用于生成受损的bash shell:
zsh ❯ env X='() { (a)=>\' sh -c "echo date"; cat echo
sh: X: line 1: syntax error near unexpected token `='
sh: X: line 1: `'
sh: error importing function definition for `X'
Fri 26 Sep 2014 12:05:57 BST
为了防止这种情况,您应该修补,卸载或禁用bash的任何冗余版本。您可以使用以下命令禁用系统bash安装chmod
:
$ chmod a-x /bin/bash
但是,脚本通常会显式调用bash。如果bash不可用,执行此操作的脚本以及使用bash特定脚本功能的脚本将失败。修补是最好的解决方案。
importing function definition
”?我还使用ssh-server注入进行了测试:ssh testuser@localhost '() { :;}; echo "$SHELL"'
我将testuser
的登录shell设置为/bin/zsh
,并且回显/bin/zsh