Edited at

OS Xのbashを更新する(brew編)

More than 3 years have passed since last update.


Introduction

 先日からbashの脆弱性についてのtweetが投稿されまくっています.環境変数に文字列を代入しているだけのはずが,なぜかevalされるのが原因のようです.

 外部コマンドを実行する際にも,bash経由でコマンドが実行されるとのことです.よって,CGIを動かしているWebサーバに対して,この脆弱性を使ってイタズラするのは意外と簡単な場合もあるようです.

 referenceで紹介しているページには,簡単な確認用のコードが載っているので使ってみてください.


OS Xのbashを更新しよう

 本来はAppleがCommand Line Toolsを更新してくれると良いのですが,脆弱性を抱えたまま待っているというのも良くないと判断しました.そこで(私のMacは特にサービスを提供しているわけではありませんが)OS Xのbashを更新してみましょう.私は普段からbrewを使っているので,今回もbrewを使います.

$ brew update

$ brew upgrade bash

「はい,これでお終い」と思ったらreadline絡みでエラーが出てしまいました.

$ bash

dyld: Library not loaded: @@HOMEBREW_PREFIX@@/opt/readline/lib/libreadline.6.dylib
Referenced from: /usr/local/bin/bash
Reason: image not found
zsh: trace trap bash

そのような場合はreadlineを再インストールすれば良いようです.

$ brew rm -f readline

$ brew install readline
$ brew link readline --force

この作業により,/usr/local/bin/bashが作られます.ただし元からある/bin/bashはそのままです.特にサービスを起動しておらず,パスの順序を正しく設定していればこれで問題無いと思います.

実際に確認すると,環境変数xの定義に失敗していることが分かります.

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

bash: 警告: x: ignoring function definition attempt
bash: `x' の関数定義をインポート中にエラーが発生しました
hello


reference

OS XのBashの脆弱性CVE-2014-6271を修正する方法


追記(2014/9/30)

Appleより,update版のbashが提供されています.こちらも併せてご利用ください.(まだ何の対策も行っていない人は,こちらのアップデートのみで構いません)

OS X bash Update 1.0 – OS X Mavericks