web-dev-qa-db-ja.com

ShellshockのバグはZSHに影響しますか?

Shellshock Bashバグ はZSHに影響しますか?

Bashのアップグレードが唯一のソリューションですか?

38
marflar

いいえ、ZSHには影響しません。

ほとんどのシステムスクリプトはbash用に作成されており、Shellshockのバグに対して脆弱であるため、[〜#〜] must [〜#〜] bashを更新します。

ZSHをテストするには、次のようにします。

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

このコードは正確に何をしますか?

  1. env x='() { :;}; echo vulnerable'は、変数の最後にコマンドを使用して、既知のバグを持つ環境変数を作成します
  2. _zsh -c 'echo hello'_はシンプルなhelloでZSHシェルを起動します(xを含むすべての環境変数を評価します)

出力が表示された場合:

_vulnerable
hello
_

次に、ZSHは脆弱です。私(5.0.2)は:

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

バイナリは影響を受けません

ソースコードにエラーが含まれていないため、シェル実行可能ファイルとしてのzshには影響しません。
bashzshの間には多くの類似点がありますが、それらは互いに独立して実装されていました。同じ機能は2つの異なる方法で実装され、このコンテキストではより重要ですが、通常は異なるエラーが発生します。

しかし、インタラクティブな使用は

間接的には、zshを操作するのとほぼ同じくらい、ターミナルでbashシェルをインタラクティブに操作するのに影響します。

bashの使用は非常に一般的であるため、これを呼び出すことは避けられません。

避けるにはあまりにも多くの用途

  • あなたが知っていて、zshを使用することを期待しているが、実際にはbashを含むスクリプト。
  • #!/bin/bashを使用してbashをインタープリターとして指定する多くのシェルスクリプト。
  • 想定しているコマンドの多くはバイナリですが、シェルスクリプトであり、その一部はbashを使用しています。

  • シェルが明示的に実行される多くの場所では、bashが使用され、必要な場合もあります。

    • 複雑なxargsコマンド、または引数を含むgitエイリアスなど
    • 端末エミュレータのデフォルトのシェル
    • Sudoを実行するユーザーのシェル
    • 等.
6
Volker Siegel

から このリンク

次のテストを実行することで、CVE-2014-6271の元の問題に対して脆弱かどうかを判断できます。

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

そのコマンドの出力でWordが脆弱であることがわかった場合、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
6
vectorsize

いいえ、Shellshockはzshに直接影響しません。

ただし、デフォルトのシェルとしてzshを使用する多くの環境には、bashもインストールされています。 zshを含む任意のシェルを使用して、侵害されたbashシェルを生成できます。

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の冗長バージョンを無効にする必要があります。 chmodを使用して、システムのbashインストールを無効にすることができます。

$ chmod a-x /bin/bash

ただし、スクリプトが明示的にbashを呼び出すことは一般的です。これを行うスクリプト、およびbash固有のスクリプト機能を使用するスクリプトは、bashが使用できない場合は失敗します。パッチの適用が最善のソリューションです。

4
joews