CVE-2014-6271 bashの脆弱性(Shellshock)とは何ですか?どうすれば修正できますか?


141

最近、Bashの脆弱性である「CVE-2014-6271」(USN-2362-1を参照)に関するニュースが流れています。この影響を受けているかどうか、どのように修正すればよいか、どうして気にする必要があるかを知るにはどうすればよいですか

これは、その範囲と重大度のために、この脆弱性に対する標準的な回答として設計されています。


18
「どうすれば修正できますか?」-> アップグレードマネージャーを実行するだけです!本当に、Ubuntuはセキュリティアップデートをリリースしています。専任のセキュリティチームがあります。ソースからBashをビルドすることについての回答を投稿しないでください!; 将来的にシステムを保守するのは不必要に複雑で難しくなります。
gertvdijk 14

5
さらに、不完全な修正のための追加のCVE。CVE-2014-7169
gertvdijk

18
してください行い、ソースからのビルドについてのポストの答えを。すべきかどうかにかかわらず、一部の人々は古代のUbuntuサーバーを所有しており、ソースから構築することが唯一の選択肢かもしれません。
GaryO

3
おっと、申し訳ありませんが、テストではダッシュの代わりにbashを使用したことに気付きました。大丈夫です。
マットH 14

4
読み取り:oss-sec:日時:CVE-2014-6271:bashを介したリモートコード実行。Bashのバグはまだ修正されていません
blade19899

回答:


126

Bashとは何ですか?

BashはUbuntuのデフォルトの対話型シェルです。端末とのインターフェースをとるとき(端末エミュレーター経由、tty経由、またはsshのいずれか)、通常bash、読み取りと実行を行うコマンドを入力します。端末をまったく使用しない場合でも、Bashがあります。

Ubuntuでは、/bin/shbash ではありません(ダッシュです)。この脆弱性の影響を受けるのはbashのみです。

この悪用はどのような影響を与えますか?

BashとOS は、現在ログオンしているユーザー、ハードディスク上のプログラムの検索場所、およびその他のそのような機能を記述する環境変数のセットを追跡します。特定の構造を持つ環境変数を作成することにより、攻撃者は次にBashを起動したときにコードを実行できる可能性があります。

攻撃者はその環境変数を複数の方法で設定できます。

  • git over sshなどの特定のセットアップを使用して、SSHなどのサービスにリモートで接続します。Mitreが警告しているように、sshd ForceCommandオプションの使用は攻撃ベクトルです。シェルがbashでないアカウントは影響を受けません。
  • 環境変数を設定するようにだまします。
  • 別のプログラムに環境変数を設定させ、その細工された値を持たせる。たとえば、特定のユーザーコンテンツで環境変数を設定する必要があるWebサーバーとスクリプトがあるとします。そのスクリプトが独自に作成し、他の環境変数に触れていなくても、それで十分です。エクスプロイトが成功するには、任意の名前と細工された値を持つ単一の環境変数で十分です
  • ここで言及していない他の方法。

彼らがこの変数を設定bashすると、何らかの理由で次回開いたときに、攻撃者のコードが実行されます。これはsudo -s、スーパーユーザー(コンピューターのデータとプログラムを完全に制御できる管理ユーザールール)としてbashを生成するため、特に怖いです。bashを標準ユーザーとしてのみ起動した場合でも、そのユーザーのファイルは削除できます。

自分でbashを使用しなくても、多くのプログラムが操作の一部としてbashを自動的に生成することに注意することが重要です。この場合でも、あなたは脆弱です。ただし、Ubuntu /bin/shはbashではないため、デフォルトのスクリプトシェルではなくbashを明示的に呼び出すプログラムのみが影響を受けます。

Mitreによると:

OpenSSH sshdのForceCommand機能、Apache HTTPサーバーのmod_cgiおよびmod_cgidモジュール、不特定のDHCPクライアントによって実行されるスクリプト、および環境の設定がBash実行から特権境界を越えて発生するその他の状況を含むベクトル。

私は脆弱ですか?

dpkgを使用して、インストールされているパッケージのバージョンを確認します。

dpkg -s bash | grep Version

これにより、bashパッケージに関する情報が検索され、バージョンのみが表示されるように出力がフィルタリングされます。固定のバージョンがあり4.3-7ubuntu1.44.2-2ubuntu2.54.1-2ubuntu3.4

たとえば、私は見ます:

wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4

そして、私は脆弱ではないと判断できます。

更新するにはどうすればよいですか?

標準のアップデートマネージャがこのアップデートを提供します。これは、どのOSを使用している場合でも、どのように適切に管理されている場合でも、セキュリティ更新がどのように重要であるかの典型的な例です。

USN速報は、新しいバージョンはUbuntuの14.04トラスティタール、12.04正確なセンザンコウ、および10.04明晰Lynxのためにリリースされていると述べています。これらのLTSバージョンのいずれかを使用していないが、比較的新しいバージョンを使用している場合は、ほとんどの場合、パッチが適用されたパッケージを見つけることができます。

まず、あなたが

脆弱な場合は、最初に最新のパッケージリストを取得する必要があります。

sudo apt-get update && sudo apt-get install bash

最初のコマンドは、修正バージョンを含む最新のパッケージリストがあることを確認し、2番目のコマンドは、bashの最新(修正済み)バージョンをインストールします。

バグはbashが生成されたときにのみ作用するように見えますが、可能であればすぐに再起動することをお勧めします。


20
申し訳ありませんが、あなたは脆弱です。元のパッチでは問題全体が修正されるわけではありません。cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169 AFAIAAを参照してください。現在公開されている修正プログラムはありません。例:people.canonical.com/~ubuntu-security/cve/pkg/bash.html
Mormegil

4
@hexafraction 12.10がこのアップデートを受け取ったことをどこで読みますか?私はそうは思いません、12.10、13.04、13.10は非常に寿命です!また、バックポートリポジトリはセキュリティ更新には使用されません
gertvdijk 14

2
@hexafractionいいえ、そうではありません!これがサポート終了となります。サポートはまったくありません。
gertvdijk 14

1
@MichaelHärtlあなたがUbuntuの12.10にしている場合は、あなたからのbashの12.04バージョンをダウンロードすることができpackages.ubuntu.com/precise/bashと手動でインストールしてください。
デビッド

2
CVE-2014-7169の修正は、アップデートマネージャーで利用可能です(私にとって)。
カルマリオ14

27

Hacker Newsでこれを盗みました。me(Odroid-XU)のようなリポジトリに問題がある場合、ソースからパッチ/ビルドする場合、これはうまく機能するはずです。

TMPDIR=/tmp/bash-src
mkdir $TMPDIR
cd $TMPDIR
#download bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 999); do 
  wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i
  if [[ $? -ne "0" ]]; then
    MAX=$(expr $i - 1)
    break;
  fi
done
tar zxf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 $MAX);do
  echo apply patch bash43-$i
  patch -p0 < ../bash43-$i
done
#build and install
./configure && make
sudo make install
cd ../..
rm -r $TMPDIR

次に実行します:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

そして、あなたが得るなら:

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test

その後、あなたはすべて元気です!


警告: make installはbashをインストールするため/usr/local/bin/bin/bash変更されず、curlから呼び出すことができます!!


1
debian lennyのパッチでbash 3.2をビルドする方法は次のとおり
Matt White

13
-1。ソースからビルドする必要はありません。Ubuntuのリポジトリにはセキュリティパッチがあります。「リポジトリに問題がある」場合は、代わりに修正してください。セキュリティアップグレードを受け取らないと、より多くの点で脆弱になる可能性があります!
gertvdijk 14

1
@Matt Whiteありがとう!あなたはちょうど私を数時間救った:)
フロリアンフィダ14

5
@FlorianFidaこれはAskUbuntuです!このサイトの誰もがUbuntuを使用する範囲で回答を投稿することが期待されています。
gertvdijk 14

6
@MichaelHärtl12.10はサポート終了です。すでに長い間、セキュリティ更新プログラムを受信して​​いません。アップグレード!!!
gertvdijk 14

9

注:CVE-2014-7169のセキュリティパッチは、標準のセキュリティアップデートとしてリリースされています。このパッチを受け取るために追加のPPAを追加する必要はありません。以下のみが必要です。

sudo apt-get update

sudo apt-get upgrade

bashに正しくパッチを適用したことを確認するには、次のコマンドを実行します

dpkg -s bash | grep Version

14.04 LTSを使用している場合、次の出力が表示されます。

Version: 4.3-7ubuntu1.4

12.04 LTSを使用している場合、出力は次のようになります。

 Version: 4.2-2ubuntu2.5

1
これは正しかったのですが、公式パッチが利用可能になったため、セキュリティ更新プログラムがリリースされました。したがって、これらの手順は必要ありません。
ロビーバサック14

これは正しいです。上記の投稿を編集します。ありがとうございました。
branch.lizard 14

1

11.04を使用している場合:以下の手順を使用します(私のために働いた)

cd ~/
mkdir bash
wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done

必要なパッチがダウンロードされていない場合は、ftpパッケージをインストールします

apt-get install ftp
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
./configure && make && make install
apt-get install build-essential
./configure && make && make install

パッチが適用されたかどうかを確認するには:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

0

EOLであるNatty 11.04を使用しています(および、old-releases.ubuntu.comを使用するように/etc/apt/sources.listを更新しています)ので、ソースからビルドする必要があります。.debをビルドしたかったので、少なくともパッケージ管理は「認識」されており、bashバージョンはデフォルトではありません。私は100%成功したわけではありません-ただし、パッケージは「新しい」として登録され、bashバイナリは修正されてしまいます。

apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/

さて、(サブ)ディレクトリbash-4.2/にはbash-4.2.tar.xzbashソースに到達するために解凍する必要のあるファイルがあります。と呼ばれるサブディレクトリdebian

の依存関係を回避するために、次の変更を行いtexliveましたbash-4.2/debian/control

Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
 debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript

...そしてbash-4.2/debian/rules

binary-doc: bash-install #bash-doc-build
        dh_testdir
        dh_testroot
        mkdir -p $(d_doc)/usr/share/doc/$(p)
        dh_installdocs -p$(p_doc) 
ifeq ($(with_gfdl),yes)
        #cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
        rm -f $(d_doc)/usr/share/doc-base/bashref
endif
        rm -f $(d_doc)/usr/share/info/dir*
        #cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
        #    $(d_doc)/usr/share/doc/$(p)/
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
        #    /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
        dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
        ...

このbash-4.2/ディレクトリでバージョンを変更するには、次の手順を実行します。

bash-4.2$ dch --local patchCVE

...そして、求められたら、変更ログにメモを記入します。これにより、.deb(および関連するメタデータ)が呼び出されます(私の場合)bash_4.2-0ubuntu3patchCVE1_i386.deb

その後、dpkg-buildpackage -us -ucまたはdebuildコマンドでビルドを試すことができます。注-これらのいずれかは、zipからソースを再展開します-したがって、あなたが持っていたかもしれないパッチを上書きします!それでも、これらのいずれかを1回実行して、ソースをアンパックしてビルドします(debuild最終的にはtexliveにより失敗する可能性がありますが、ソースをアンパックしてビルドする必要があります)。

次に、パッチを適用します。-p1現在bash-4.2/ディレクトリにいるため、ここで使用する必要があることに注意してください。

bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch 
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch 

次に、次を実行して、パッチを適用したバージョンを再構築します。

bash-4.2$ fakeroot debian/rules build 

これにより、実行可能ファイルが再構築されます。テストするには:

bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"

.debファイルをビルドするには、次を実行します。

bash-4.2$ fakeroot debian/rules binary

これにより、親ディレクトリに.debファイルが保存されます。内容をリストするには:

bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb

.debをインストールするには:

bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb

ただし、何らかの理由で、この.debにはパッチが適用されていないバイナリ(?!)が含まれているため、さらに次の操作を行う必要がありました。

bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/

...そしてその後、テストは私のために正しく合格し始めました:

$ env VAR='() { :;}; echo Bash is!' bash -c "echo Bash Test"
bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR'
Bash Test

質問:元の質問には、1つの可能な攻撃ベクトルが「不特定のDHCPクライアントによって実行されるスクリプト」として記載されています。これは何を意味するのでしょうか?これはUbuntuの/ sbin / dhclient <-が脆弱であることを意味しますか?
ブラン14年

おそらく、不特定のクライアントとは、Ubuntuが/ sbin / dhclientに感染していることを意味し、bashスクリプトがshellshockを起動するコマンドを実行することを意味すると思います。DHCPクライアントがshellshockに対して脆弱なのはそれですか?(理にかなっている希望、10月10日から私の上記のメッセージを参照してください)
ブラン14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.