Shellshock(リモートエクスプロイトCVE-2014-6271およびCVE-2014-7169)を回避するために、Bashを再コンパイルするにはどうすればよいですか?


368

Bash 3.2(OS Xに同梱されているバージョン)は、「シェルショック」(CVE-2014-6271およびCVE-2014-7169)として知られるリモート実行エクスプロイトに対して脆弱です。公式のAppleパッチ?

更新:Appleが公式パッチをリリースしたことに注意してください。詳細は以下をご覧ください。


5
Appleは修正をリリースしました:support.apple.com/kb/DL1769
AT

1
上記のOS X bash Update 1.0パッチは、OS X 10.9.5以降に固有のものです。それらはすべて、OS X 10.7.5(Lion)、OS X 10.8.5(Mountain Lion)、OS X 10.9.5(マーベリックス)。
L'L'L

はい、9時間前にリンクを追加しましたが、誤って削除されました。 apple.stackexchange.com/revisions/146849/10
AlBlue

要点gist.github.com/dnozay/395dcdef05c6b4b1836aを作成しました。これにはほとんどの手順が含まれており、すでにパッチが含まれています(OSX 10.6で動作するはずです)。
dnozay 14年

@dnozay要点をありがとう!パッチ55および56(既にリリース済み)および57(近日リリース予定)を含むように更新してください。
古いプロ14年

回答:


429

状態

Appleは、Shellshockおよび関連する脆弱性に対するBashセキュリティ修正を「OS X bash Update 1.0」としてリリースしました。OS X Mountain Lion v10.8.5またはOS X Mavericks v10.9.5(Security Update 2014-005に含まれています)を使用しているユーザー向けの通常のシステムアップデートでインストールできます。また、手動でインストールすることもできます。公式のAppleの修正プログラムは、OS X Lion v10.7.5およびOS X Lion Server v10.7.5でも利用できますが、これらは手動ダウンロードでのみ入手できます。セキュリティ修正プログラムは、オペレーティングシステムのバージョンに基づいて異なるURLから入手できます。

(新しいパッチがリリースされた場合、ここにそれらを入れますが、これらの既存のパッチも参照用に保管してください。)

Appleパッチは、Shellshockおよびその他のいくつかの脆弱性を処理し、ほとんどの人にとっては問題ありません。tl; dr人はここで読むのをやめることができます。

ただし、Shellshockバグによってbashに注目が集まったため、多くの研究者がbashを厳重に調査し、ますます(悪用​​しにくい)脆弱性が発見され続けています。セキュリティを非常に心配している場合(OS X Serverを実行して公開されているWebサイトをホストしている可能性があるため)、自分でbashをコンパイルすることにより、脆弱性とパッチが追いついてくるのを追いかけることができます。それ以外の場合は、心配しないでください。

Appleが別のアップデートをリリースして、将来、さらなる脆弱性の発見に落ち着くときにbashすることを期待してください。


bash 3.2用のbash自体のパッチの公式セット、パッチ52、53、および54(Bash 4.3パッチ25、26、および27に対応)が利用可能であり、CVE-2014-6271とCVE-2014-7169の両方を修正します。下に表示される「ゲームオーバー」も同様です。これは私(@alblue)によってテストされ、それに応じて投稿が更新されました(そして、追加の更新が行われました:パッチ54で停止する投稿についてはリビジョン41を参照してください)。

bashに対する多くの追加の脆弱性が報告されています。Michal Zalewskiの投稿によると、パッチ54(およびおそらくAppleの公式パッチ)がある場合、「これらのバグはセキュリティリスクを引き起こさないはずなので、これらの個々のバグのステータスに執着する意味はありません。」

  • CVE-2014-6271-ステファンが発見した元のRCE。他のバージョンのbash43-025および対応する9月24日のエントリによって修正されました。

  • CVE-2014-7169-ファイル作成/トークン消費のバグがTavisによって発見されました。bash43-026およびcoにより修正(9月26日)

  • CVE-2014-7186-フロリアンとトッドによって発見された、おそらく何もリスクのない10以上のhere-docクラッシュ。bash43-028&co(10月1日)で修正。

  • CVE-2014-7187-フロリアンによって発見された、クラッシュしない、おそらく秒リスクなしのオフバイワン。bash43-028&co(10月1日)で修正。

  • CVE-2014-6277-初期化されていないメモリの問題、ほぼ確実にMichal Zalewskiが発見したRCE。特定のパッチはまだありません。

  • CVE-2014-6278-Michal Zalewskiが発見したコマンドインジェクションRCE。特定のパッチはまだありません。

かなり混乱します。幸いなことに、公式のbashメンテナーであるChet Rameyは、パッチマッピングにCVEを投稿しました。彼の投稿はbash 4.3のパッチに言及していますが、私(@OldPro)はそれらをOS Xに適用可能なbash 3.2のパッチに翻訳しました。また、この投稿以来、彼はパッチ57をリリースしました。

 bash32-052      CVE-2014-6271                           2014-09-24
 bash32-053      CVE-2014-7169                           2014-09-26
 bash32-054      exported function namespace change      2014-09-27 ("Game Over")
 bash32-055      CVE-2014-7186/CVE-2014-7187             2014-10-01
 bash32-056      CVE-2014-6277                           2014-10-02
 bash32-057      CVE-2014-6278                           2014-10-05

タイムラインと詳細については、David A. Wheelerの投稿を参照してください。

@alblueは、パッチ55を通じてビルド手順を投稿しました。I(@OldPro)は、手順にパッチ56および57を追加しましたが、テストしていません。

元の脆弱性のテスト

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

$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello

上記の出力は、脆弱性のないbashバージョンの例です。vulnerableそのコマンドの出力に単語が表示されている場合bashは脆弱であり、更新する必要があります。以下は、OS X 10.8.5の脆弱なバージョンです。

10.8.5の脆弱性を示すbashターミナルのスクリーンショット

新しい脆弱性のテスト

元の投稿に更新があり、Bash 3.2.52(1)は、CVE-2014-7169で定義された脆弱性のバリエーションに対して依然として脆弱です。

$ rm -f echo
$ 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'
Thu 25 Sep 2014 08:50:18 BST

上記の出力は、脆弱なbashバージョンの例です。そのコマンドの出力に日付が表示される場合、bash脆弱です。

「ゲームオーバー」を防ぐために自動インポートされた機能を無効にする

研究者は、脆弱性として分類せずに、スクリプトが自動インポート関数を使用してサブシェルの関数をハイジャックする可能性があることに注意しました。

$ env ls="() { echo 'Game Over'; }" bash -c ls
Game over

影響を受けるシステム上の上記のコードは、Game Over予想されるディレクトリ一覧の代わりに表示されlsます。明らかに、echo 'Game Over'あなたが望むどんな邪悪なコードでも置き換えることができます。これは「ゲームオーバー」バグとして知られるようになりました。

パッチ54が利用可能になる前は、NetBSDFreeBSDの両方がデフォルトで自動インポートbash機能を無効にしており、一部は「ゲームオーバー」を防ぐためでしたが、主にパーサーにさらなるエラー(CVE-2014-7169など)を含めるためです発見され続け、新しいコマンドラインフラグを追加しました--import-functions古いデフォルトの動作を再度有効にします。私(@alblue)は、他の人がこの動作を採用したい場合に使用するパッチ(3.2.53に対する)を準備し、それを以下に含めました。デフォルトでは、このパッチは以下のビルドスクリプトで有効になっていません。私(@OldPro)は、このパッチはもはや必要ではないか、良いアイデアだと考えています。下位互換性を壊し、それが保護する脆弱性はパッチ54以前のパッチで非常によく対処され、この非公式パッチを有効にすると将来のパッチが適用されないためです。

(質問編集者への注意。これは非公式のパッチであるため、デフォルトでは有効にしないでください。)

a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_functions.patch

パッチを有効export ADD_IMPORT_FUNCTIONS_PATCH=YESにするには、ビルドを実行する前に実行します。このパッチを有効にすると、パッチ54および将来のパッチが無効になることに注意してください。将来のパッチは非公式のパッチとの互換性を保証できないためです。

Apple PatchにはGame Over脆弱性があります

Twitter@ake_____が指摘したように、公式のAppleパッチは実行可能ファイルの環境破壊に対して依然として脆弱です。

$ env '__BASH_FUNC<ls>()'="() { echo Game Over; }" bash -c ls
Game Over

ユーザーは、これがどれほど重要かを自分で決める必要があります。私(@OldPro)は、一般的に非特権リモート攻撃者は環境変数の名前を設定できず、特権を持つ攻撃者はできないため、この動作に対する既知のエクスプロイトがないため、心配する必要はないと思います(CVE識別子も与えられていませんでした)これを使用して、まだ持っていない特権を取得します(少なくとも追加の脆弱性を利用しない限り)。

背景を少し説明するために、bashでは関数を定義でき、さらにコマンドを使用してそれらの関数をサブシェルにエクスポートできますexport -f。これは、関数定義に値が設定された関数と同じ名前の環境変数を作成することで実装されていました。そう

$ ls () { echo 'Game Over'; }
$ export -f ls
$ echo $ls
Game Over

これは、export -f lsという名前の環境変数を作成したために発生しましたls。「ゲームオーバー」の脆弱性は、最初に関数を定義することなく、この環境変数を直接作成できることでした。つまり、正しい変数名を注入できれば、コマンドをハイジャックできます。Appleは、正しい名前の変数を作成するのを難しくすることで、これを修正しようとしました。公式のbashパッチ54 %は、変数名に許可されていない文字を含む変数名を使用して、正しい名前の変数を作成することを実際に不可能にし、エクスポートされた関数定義を別の予約済み名前空間に効果的に配置します。

上記のいずれにも意味がない場合は、心配しないでください。今のところAppleのパッチは問題ありません。

システムバイナリ

OS X 10.9.5(現時点で最新の安定版リリース)は、Bash v3.2.51に同梱されています。

$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

Xcodeがインストールされている(およびライセンスを受け入れる前に少なくとも1回実行している)場合、次のようにBash 取得して再コンパイルできますxcodebuild

$ # If you want to disable auto-imported functions, uncomment the following
$ # export ADD_IMPORT_FUNCTIONS_PATCH=YES
$ mkdir bash-fix
$ cd bash-fix
$ curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
$ cd bash-92/bash-3.2
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0    
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0  
$ # See note above about ADD_IMPORT_FUNCTIONS_PATCH
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] && curl http://alblue.bandlem.com/import_functions.patch | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-055 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-056 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-057 | patch -p0
$ cd ..
$ # Note: DO NOT ADD SUDO TO XCODEBUILD HERE
$ xcodebuild
$ build/Release/bash --version # GNU bash, version 3.2.57-release
$ build/Release/sh --version   # GNU bash, version 3.2.57-release
$ sudo cp /bin/bash /bin/bash.old
$ sudo cp /bin/sh /bin/sh.old
$ sudo cp build/Release/bash /bin
$ sudo cp build/Release/sh /bin

(注:上記のコードブロックをコピーして貼り付け、ターミナルに移動して実行することでこれを実行できますpbpaste | cut -c 2- | sh。ただし、インターネットからランダムスクリプトを実行するときは常に注意してください...)

この後、Bashバージョンはv3.2.57になります。

$ bash --version
GNU bash, version 3.2.57-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

セキュリティのため、およびテスト後chmod -x、古いバージョンを再利用しないように、またはバックアップサイトに移動するために古いバージョンを使用することをお勧めします。

$ sudo chmod a-x /bin/bash.old /bin/sh.old

他の回答には、MacPortsまたはHomebrewを使用している人向けのソリューションがあります。これらは問題を解決しません。Bashの追加バージョンをインストールするだけです。これらを具体的にアップグレードする場合は、それらの回答を参照してください。

ありがとう

bashを管理し、これらのパッチを提供してくれたChetに感謝します。これについてコメントし、時間の経過とともに改善してくれたすべての人に感謝します。

Appleは実際の修正をリリースしましたが、これはまだ有用かもしれません。ただし、Lion以降の修正プログラムのみをリリースし、公式パッチはGNU bashバージョン3.2.53(1)-release(x86_64-apple-darwin13)を提供するため、ゲームオーバーバグは依然として多少脆弱です。この時点で、3.2.57に対するBashの独自バージョンの再構築は、間違って行わない限り、おそらくAppleのパッチに依存するよりも安全です。


18

Macports

これにより、両方の脆弱性(CVE-2014-6271およびCVE-2014-7169)とその後に発見されたいくつかの脆弱性にパッチを当てたbashバージョン4.3.28(1)が得られます。これは、Macports bashを使用してバージョン4の機能を取得するようにシェルを変更した場合に役立ちます。

持っている#!/bin/sh#!/bin/bash最初の行としての標準OSスクリプトの問題は解決しません。この種の問題は、Macportsがより速く更新される傾向があるため、MacportsがAppleが提供するプログラムのバージョンを使用しないようにしようとする理由です。たとえば、bashの新しいバージョンがあります。

Homebrewの回答のように端末にこれを使用させることができます

MacPortsのは、続くインストールするには、以下の手順です
。1.インストールXcodeとのXcodeコマンドラインツール
2.ターミナルでXcodeのライセンスに同意します。sudoは-license xcodebuild
OS Xのバージョンに3.ダウンロードのMacPortsのPKGを:リンクがページ上にある
4。 pkgを実行します

macportsがインストールされている場合、最新バージョンを使用する必要があります。これは、

sudo port selfupdate

再コンパイルまたは最新のバイナリを入手するには

sudo port upgrade outdated

5
これは既存のバイナリのセキュリティの脆弱性を修正することに関するものであり、脆弱なバイナリを置き換えたり修正したりするものではないため、これがどのように問題を解決するのかわかりません。
アルブルー14

これは、MacPortsのバージョンをキツネ-とIanCさんのコメントへの要求には本当にだった
マーク・

はい。bash通常、OS Xに由来するすべての場所の修正をリストする必要があります。システム修正、Homebrew、MacPorts修正です。おそらくFinkも。これが@AlBlueの回答の編集として作成された場合、個人的にそれを好むでしょう。だから、それはすべて1つ、最も正しい答えです。
イアンC.

2
@InaCは回答が異なり、1つはチェックできないので、これらは分離する必要があります-たとえば、これはAppleのbashとHomebrew bashをOSX経由でコピーする自家製の回答を修正しないと言ってください。実際には、それらは別々の質問です
マーク

@AlBlueの回答の編集を参照してください。これらは別のものであることに同意しません。
イアンC.

17

公式のApple OS X bashアップデート1.0に関する注記:このソフトウェアアップデートは、公式のApple bashバージョン3.2.53のみをもたらします。3.2.54パッチリビジョンは、次の変更を提供します。

このパッチは、bashがエクスポートされた関数に使用するエンコーディングを変更し、シェル変数との衝突を回避し、環境変数の内容のみに依存してシェル関数として解釈するかどうかを判断しないようにします。

すでにシステムに3.2.54バイナリをパッチしているユーザーの場合、コンパイル済みのバイナリをAppleパッチに置き換えるか、そのままにしておくことができますが、これはお勧めしません。Appleは3.2.53でバイナリバージョンを残しましたが、Appleのパッチには以下のエクスプロイトテストの修正が含まれています。

env X='() { (a)=>\' sh -c "echo date"; cat echo

つまり、Appleの公式3.2.53バイナリには、バニラGNU 3.2.54バイナリと同等のセキュリティが含まれています。不幸な混乱のポイントですが、それはそれです。Appleの修正は中途半端ではありません。これは問題の完全な修正のようです。そのため、バニラのコンパイルbashshGNUソースからの以下のロードマップは、歴史的な成果物と見なされ、必要に応じて将来パッチを行う方法のテンプレートとして参照される可能性があります。

注:GNUのバニラソースにshは、Adobe Flashなどのさまざまなインストーラーでエラーを引き起こす特権の昇格の問題があります。Appleがパッチを当てたバイナリを使用することを強くお勧めします。このパッチスキームは非推奨であり、賢明ではないと考えてください。

次の修正を説明する新しいGNU bash 3.2.55パッチがあります。

バグの説明:

parse.yには2つのローカルバッファオーバーフローがあり、単一のコマンドまたはネストされたループに添付された多くのヒアドキュメントを指定すると、シェルがコアをダンプする可能性があります。

公式のAppleパッチを適用したバイナリを使用するか、新しい可能性のあるエクスプロイトに対処するために独自のバイナリを使用するかを判断するのは、読者の皆さんにお任せします。個人的には、Appleのバイナリに固執します。


この投稿は、コンパイルとバニラをインストールする方法を詳しく説明bashし、shOS X上で私は正しいパッチリビジョンで私を残していなかったアップル固有のソースを使用して詳細例を次のようにこのルートを選びました。YMMV。ただし、このバニラのインストールは、OS Xバイナリを置き換えることを目的としているため、Appleが最終的にセキュリティ更新プログラムをリリースすると、これらのバニラの置き換えは適切なAppleの対応製品によって奪われます。

私の基本構成は次のとおりです。

すべてのコマンドラインユーティリティがインストールされたOS X Lion 10.7.5およびXcode 4.6.3。

これを修正する手順は次のとおりです。

3.2.48のベースbashソースコードを次からダウンロードします。

https://ftp.gnu.org/gnu/bash/bash-3.2.48.tar.gz

以下からbash3.2.49、.50、.51、.52、.53、.54、および.55パッチをダウンロードします。

https://ftp.gnu.org/gnu/bash/bash-3.2-patches/

これらを$ filename.patch、たとえばbash3.2.50.patchとして保存しました。

ダウンロードディレクトリにCDを挿入して…

メインソースブランチを展開します。

tar xzvf bash-3.2.48.tar.gz

cd bash-3.2.48

以前に説明したように、ダウンロードしたパッチファイルの名前を変更したと仮定すると、

cp ../*.patch .

それから…

for file in *.patch ; do
  patch -p0 < $file
done

これにより、さまざまなファイルの正常なパッチが表示されます。そうでない場合は、調査と調査を行う準備をしてください。

次:

sudo cp /bin/bash /bin/bash_old
sudo cp /bin/sh /bin/sh_old
sudo chmod -x /bin/bash_old
sudo chmod -x /bin/sh_old

これは基本的に、古い脆弱なbashおよびshシェルをバックアップし、それらの実行可能特権を削除しました。これにより、必要に応じてコマンドを復元できるようになりますが、その間にダメージを与える機能は削除されます。

次:

./configure --prefix=/ ; make ; sudo make install

これにより、新しいbashバイナリが/ binに正しく構成、コンパイル、インストールされるはずです。完了したら、ターミナルを終了して再度開きます。

幸福と笑顔のすべてが、bash --version3.2.55を見ることができるようになるはずです。

Gaia:Downloads trane$ bash --version
GNU bash, version 3.2.55(1)-release (i386-apple-darwin11.4.2)
Copyright (C) 2007 Free Software Foundation, Inc.

上記のコマンドの正確な出力は、OS Xのバージョンによって異なります。

また、脆弱性をテストして、問題bashがないことがわかるはずです。

注:これまでbashを修正しただけですが、/bin/sh実行可能ファイルはまだ脆弱な状態です。単にコピーbashの上には、sh物事のLinuxのスタイルです。ただし、OS Xのsh実装にはからいくつかの違いがあるbashため、コンパイラをもう一度ドラッグしてください。OS X での方法bashsh相違点の詳細については、こちらをご覧ください。

https://apple.stackexchange.com/a/89327/91441

ダウンロードディレクトリで以下を実行します。

make clean

お気に入りのエディターで、ファイルMakefile.inを開いて99行目までスクロールします。プログラム行を変更して、出力するバイナリshが次のbashようになるようにします。

Program = sh$(EXEEXT)

保存してから

./configure --prefix=/ --enable-xpg-echo-default --enable-strict-posix-default
make ; sudo make install

これでsh、Appleとほぼ同じようにビルドできます。

最後の注意点:一部の(すべて?)システムでは、Appleは通常、bashbug実行可能ファイルをに配置するよう/usr/binです。私たちのコンパイルはそれをに入れ/binます。したがって、ここでの最終ステップ:

sudo mv /usr/bin/bashbug /usr/bin/bashbug_old
sudo chmod -x /usr/bin/bashbug_old
sudo mv /bin/bashbug /usr/bin/bashbug

1
泣き言を言うか何かが、質問があるときに、私の答えはその質問への答えに次のリンクをクリックして」ある「どのように私はbashの再コンパイルを行うに」しないように、それは要約要件が立っているようです。
トレーンFrancks

2
わかった:bashに含まれているreadlineライブラリは10.6と互換性がありません。代わりにGNU readlineをインストールしてから、bash makefileをハックして使用します。readlineをインストールします。ftp.cwru.edu / pub / bash / readline -6.3.tar.gz bashで、configureを実行した後、MakefileでREADLINE_LIB = /usr/local/lib/libreadline.aクリーンコンパイルを設定して実行します。その後、ストリップの上に新しいbashのバイナリをコピー/bin/bashして/bin/sh
セス・ノーブル

2
補遺:bash Makefileでは、を設定する必要もありHISTORY_LIB = /usr/local/lib/libhistory.aます。それ以外の場合、bashはlibhistoryの/ usr / localバージョンに動的にリンクされます。
セスノーブル14

1
Appleオープンソースページからダウンロード可能なバージョンには、OSXで動作するようにカスタムの変更が加えられています。バニラのアップストリームバッシュを使用することはお勧めしません。
AlBlue

1
Appleは、システム上のオープンソースユーティリティを最適化するために多くの変更を行います。とは言ってもbash、カーネルが異なるだけで、バニラがどこかでそれ自体の動作に失敗する場所はわかりません。いずれにせよ、私は自分の解決策は一時的なものだと考えています。結局、にコンパイルするための私の主な理由である(Appleが問題にパッチを適用するの周りになりますし、私のコンパイルされたバイナリが置き換えられます/bin最初の場所で。
トレーンFrancks

15

ソースからのコンパイルに苦労している人のために、9月29日の時点で、AppleはMac OS X 10.9.5、10.8.5および10.7.5のパッチを公式にリリースしました。


1
ありがとう!これは、多く/ほとんどを再コンパイルするよりも簡単です。
アルブルー14

@AlBlue同意しました。また、一部の人が指摘しているように、パッチは完全にクリーンではありませんが、これは何もないよりもはるかに優れています。また、パニックでソースコードをコンパイルする初心者よりもはるかに安全です。
JakeGould 14

2
通常どおり、ソフトウェア更新の伝播遅延は完全に有効です。パッケージが表示されるまでにどれくらい時間がかかるのでしょうか。Appleがこの問題に非常に迅速に応答したのを見るのは爽快です!
トレーンフランクス14

2
@TraneFrancks「いつものように、ソフトウェアアップデートの伝播遅延は完全に影響します。」U2のフルアルバムをすべてのiOSユーザーにプッシュする組織が、4MB未満のセキュリティアップデートでどうにか窒息する可能性があることを私は本当に理解していません。
JakeGould 14

@JakeGould:へえ。ええ、それは笑いです。このLionシステムでソフトウェアアップデートをチェックしたところ、システムが最新であると主張しています。ここで別のマウンテンライオンシステムと同じです。
トレーンフランクス14

5

まず、この脆弱性にbashとshをパッチすると、Macの一部のスクリプトが破損する可能性があります。Macから直接パブリックインターネットにWebサービスを提供しているのでない限り、これを実際に行う必要はありません。したがって、本当に必要ない場合は、Appleから公式のセキュリティ更新プログラムが提供されるまで待ちます。

警告がありますが、ここでは、Mavericks 10.9でBrewを使用してこの更新を行う方法に関するいくつかの手順を示します。

最初に、古いbashを使用していることを確認します。

$ which bash
/bin/bash
$ /bin/bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

最新のbashは4.3.25です

Xcodeがインストールされていない場合は、Xcodeコマンドラインツールが必要です。

$ xcode-select --install

または開発者ポータルから。

Brew(http://brew.sh)をインストールするには:

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

それから:

$ brew doctor

問題がある場合は、指示に従ってください。ここでは、多くの一般的な問題に対処しています

次に、brewをパッケージの最新リストに更新します。

$ brew update

最新のbash 4.3.25を取得するには:

$ brew install bash

これにより、bashがインストールされます /usr/local/Cellar/bash/4.3.25/bin/bash

bashsh今でもはに存在する/binので、インストール後には、新しいファイルに古い実行ファイルの名前を変更します。

$ sudo mv /bin/bash /bin/bash_old
$ sudo mv /bin/sh /bin/sh_old

あなたが非常に妄想的である場合、あなたは上の実行権限を削除することができます bash_old

$ sudo chmod a-x /bin/bash_old /bin/sh_old

次に、brewがインストールされた新しいbash 4.3.25へのシンボリックリンクを作成します。

$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/bash
$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/sh

再起動すると完了です。

警告—これは、bash 3.2に依存する既存のシェルスクリプトや、Mac shがlinuxで持っている違いに影響する可能性のある既存のシェルスクリプトを破壊する可能性がありshます。同じスレッドの@TraneFranksによる回答から、ソースからのbashとshを置き換えるためのはるかに洗練された回答があります。


4
3.2.51から3.2.52にパッチを適用すると、4.3.anythingにアップグレードするよりもダメージが少なくなります。
AlBlue 14

私はそれがいくつかのスクリプトを壊すかもしれないと警告しますが、4.3.25はBrewが最新のものとしてインストールするものです。また、古い実行可能ファイルの名前を変更することで、いつでも復元できます。
クリストファーアレン14

2
このバグは悪意のあるDHCPサーバー(WiFiホットスポットなど)によって悪用可能であり、コンピューターを完全に破損させる可能性があるため、できるだけ早く修正する価値があります。他の答えには交換の指示が/bin/bashあり/bin/sh、Brewの最新のbashにアップグレードするよりも問題が少ない可能性があります。
古いプロ14

MacはDHCP攻撃に対して脆弱ではない可能性があります。
クリストファーアレン14

10
DCHPサーバー攻撃は、DHCPクライアントがBashスクリプトを使用している場合にのみ可能ですが、OSX実装ではそうではありません。
アルブルー14

5

OS X 10.6.8-Snow Leopard

@AlBlueの投稿は非常に完成しています。ただし、私のOS X 10.6.8サーバーでは、彼の修正は機能しません。Appleには10.6.8の修正はなく、@ AlBlueで説明されている手順はXcode 3.2.6(Snow Leopardの最新バージョン)では機能しません。私はエラーを受け取ります:

** BUILD FAILED **

The following build commands failed:
sh:
    CodeSign /Users/bas/bash-fix/bash-92/build/Release/sh
bash:
    CodeSign /Users/bas/bash-fix/bash-92/build/Release/bash
(2 failures)

このため、私はbrew.shを使用しています。OS X 10.6.8 Snow Leopardのより良いソリューションがある場合は、あなたの考えをコメントしてください。@Jeromeのコメントも参照してください。彼は@AlBlueのソリューションを使用してOS X 10.6.8 Snow Leopardにパッチを適用しました。とにかく:

まず、次のonelinerを使用してbrewをインストールします。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

更新 brew

brew update

次に、最新バージョンをインストールしてbash、現在のバージョンを置き換えます。

brew install bash
sudo sh -c 'echo "/usr/local/bin/bash" >> /etc/shells'
chsh -s /usr/local/bin/bash
sudo mv /bin/bash /bin/bash-backup
sudo ln -s /usr/local/bin/bash /bin/bash

Command (complete path)環境設定(Command,)で Terminal.app のデフォルトのログインシェル ' 'を設定できます。ここに画像の説明を入力してください


注:コメントでは、一部のユーザーはこの方法は適切ではないと考えています。しかし、私にとってこれは、OS X 10.6.8 Snow LeopardでBASHをアップグレードする唯一の包括的な方法です。


1
また、いくつかのスクリプトはbashの3に依存していると(MacPortsのは、私は自家製のに更新されたと仮定bashの4.3.25固定しているbashの4では動作しません
マーク・

2
あなたも更新しshていません-あなたもそれを行う必要があります。/bin/sh!= /bin/bash/bin/shシステムコマンドを実行すると、多くのツールが実行されます。system()たとえば、Rubyの呼び出し/bin/shは、文字列内で展開する必要があるシェル展開文字がある場合に使用します。Homebrewを使用してシステムバイナリIMOを更新し、負けゲームをプレイしています。システムバイナリの適切な更新bash に加えて、Homebrewを更新する必要があります。
イアンC。

1
OSX 10.8および10.9はBash 3.2を使用しているため、直接一貫性を保つために、バージョン3.2を使用しました。これはまた、拡張属性の啓発などのようなエキストラを含むことが以前のバージョン、Appleの公式ビルドにそれをベース
AlBlue

1
すべてのインスタンスで3.2.6を実行しています。実行時にビルドが失敗することを理解していxcodebuildますか?もしそうなら、私はそれを経験しませんでした。複数のbashビルドがあるかどうかを確認し、クリーンアップ(ブリューアンインストール)を検討し、場合によってはxcodeを再インストールします。その後、パッチプロセスを新たに開始します。
ジェローム14年

1
Snow Leopardで手作りのbash-4.3で深刻なジョブ制御の問題が発生しました(emacsを起動してから一時停止すると、「fg」で再開できません)。私は以来からbashのためのSnow Leopardのソースをダウンロードしたopensource.apple.com/release/mac-os-x-1068、からパッチを適用ftp.gnu.org/gnu/bash/bash-3.2-patches、とに再建しますはるかに良い効果。
モルメギル14年

-6

こちらの手順に従ってください:https : //github.com/tjluoma/bash-fix基本的に、ターミナルで次の操作を行います。

curl -s https://raw.githubusercontent.com/tjluoma/bash-fix/master/bash-fix.sh | zsh -f

5
ランダムgithubアカウントからランダムシェルスクリプトを実行することは、どのマシンでもより安全な状況を実現する方法ではありません。エンドポイントを信頼したい。
イアンC。

ここでイアンに同意しなければなりません。これらのCVEで説明されている問題など、信頼されていないシェルスクリプトによって劇的な損害をもたらすのは非常に簡単です。
トレーンフランクス14

このFUDの普及には強く反対します。すべてのシェルスクリプトを実行する前に、https://からのみ読み取ります。
dhchdhd 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.