Shellshock错误会影响ZSH吗?


Answers:


36

不,它不会影响ZSH。

您仍然必须更新bash,因为大多数系统脚本都是为bash编写的,并且容易受到shellshock错误的攻击。

要测试您的ZSH,请执行以下操作:

env x='() { :;}; echo vulnerable' zsh -c 'echo hello'

该代码的作用是什么?

  1. env x='() { :;}; echo vulnerable' 使用变量末尾的命令创建具有已知错误的环境变量
  2. zsh -c 'echo hello'使用简单的hello启动ZSH Shell(并评估所有环境变量,包括x

如果看到输出:

vulnerable
hello

然后,您的ZSH容易受到攻击。我的(5.0.2)不是:

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello

1
如果我们使用zsh但我们的系统中仍然有bash!我们需要为此担心吗?如果不是,为什么?
Dineshkumar 2014年

16
@Dineshkumar:是的,您仍然应该担心并修补。原因是,即使使用的是zsh,其他程序(提到了dhcp,许多PHP应用程序也可能会使用,而典型Linux机器上的许多其他程序和脚本)仍然会调用bash。(实际上,他们不应该这样做,但是这已成为一种坏习惯。)
hans_meine 2014年

2
@stephenmurdoch Ubuntu 10.10相当老,两年多来一直不受支持……
Izkata 2014年

2
@Ghanima:调用bash对于系统实用程序是个坏习惯,因为不能保证会安装bash。/bin/sh是标准外壳程序,必须是正确的POSIX Shell解释程序。
2014年

2
fwiw-当bash作为/ bin / sh运行时,它作为POSIX兼容shell运行。但是,在这种模式下,它也存在错误。 env x='() { :;}; echo vulnerable' sh -c 'echo hello'
2014年

6

从此链接

通过执行以下测试,可以确定您是否容易受到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

还要注意,按照链接zshell上的说明修补bash时,它不再容易受到攻击,这使我认为zshell在其核心上使用bash。
vectorsize 2014年

9
请注意,已经进行了跟进env X='() { (a)=>\' bash -c "echo date"将在经过修补的bash上并且尽管抛出很多错误,但仍会生成一个名为的文件echo,其中包含日期。我不想知道为什么
JonasSchäfer2014年

@Jonas等待,产生一个文件?我知道该漏洞,但这很奇怪。
门把手2014年

5
@vectorsize zsh根本使用bashbash在您的示例中被明确调用。使用哪个shell运行这些行都没有关系。此漏洞影响新启动的bash shell,而不影响运行它的shell。
阿达芬2014年

2
@Adaephon因此,我想用替换bash示例$SHELL
乔纳斯·谢弗

6

二进制文件不受影响

它不会zsh作为shell可执行文件起作用,因为它的源代码从不包含该错误。和
之间有许多相似之处,但它们是彼此独立实现的。可以通过两种不同的方式来实现相同的功能,并且在这种情况下更重要的是通常具有不同的错误。bashzsh

但是互动使用是

间接的影响与zsh在终端中与外壳进行交互工作几乎一样bash

的使用bash是如此普遍,以至于人们几乎无法避免调用它。

避免使用太多

  • 您知道并期望使用zsh但实际上包含的脚本bash
  • 许多#!/bin/bash用于指定bash为解释器的shell脚本。
  • 您假定的许多命令都是二进制文件,但它们是Shell脚本,其中一些使用bash

  • 在显式执行Shell的许多地方,bash可能会使用,甚至可能需要这样做。

    • 例如复杂的xargs命令或git涉及参数的别名
    • 终端仿真器的默认外壳
    • 您sudo的用户外壳
    • 等等

4

不,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特定脚本功能的脚本将失败。修补是最好的解决方案。


似乎zsh隐式地将bash用作“ importing function definition”?我还使用ssh-server注入进行了测试:ssh testuser@localhost '() { :;}; echo "$SHELL"'我将testuser的登录shell设置为/bin/zsh,并且回显/bin/zsh
Bossliaw 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.