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が提供されています.こちらも併せてご利用ください.(まだ何の対策も行っていない人は,こちらのアップデートのみで構いません)