Shellshockがよくわからなかったからterminalで叩いてみたでござる

Shellshock盛り上がってますね。不勉強ながら

Bash 脆弱性 – ShellShock- (2) CVE-2014-6271 / CVE-2014-7169 は何が危険で問題なのかを検証してみました – CLARA ONLINE techblog

$ 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上の処理の両方とは無関係に、環境変数に入れ込む関数の外に書いた処理が、環境変数引き渡し時に勝手に実行される脆弱性ということでやっと理解しました。

さて、時間があったらパッチとかソースとかでも読んでみますか。。。