shellshockの脆弱性のときのメモ 2014/09/29
2014/09/24発覚のshellschockで知ったbashの仕様
- bashの関数は、環境変数にエクスポートできる
- bash起動時に環境変数に関数定義として書かれた内容は、関数として使える
- bash起動時に環境変数に関数定義の後ろにコマンドがあった場合に、それを実行してしまう(shellshock対策前は。対策済みだと、後ろにコマンドがあるとエラーになる)
以下は、検証コード。
#!/bin/bash
myfunc() { echo Hello; }
myfunc
# 以下の表示
# => Hello
echo $myfunc
# なにもひょうじされない
export -f myfunc
env | grep -A1 myfunc
# shellshockの脆弱性があると
# myfunc=() { echo Hello
# }
#
# shellshockの脆弱性が対策済みだと
# BASH_FUNC_myfunc()=() { echo Hello
# }
#
# 変数名の前に BASH_FUNC_ が、後ろに () が付くようになった
export myfunc2='() { echo Hello2; }'
myfunc2
# 以下のエラー
# myfunc2: command not found
bash -c "myfunc"
# shellshockの脆弱性対策の前後とも以下の表示
# Hello
bash -c "myfunc2"
# shellshockの脆弱性があると以下の表示
# Hello2
#
# shellshockの脆弱性が対策済みだと以下のエラー
# myfunc2: command not found
bash -c "BASH_FUNC_myfunc"
# shellshockの脆弱性対策の前後とも以下のエラー
# BASH_FUNC_myfunc: command not found
# shellshockの脆弱性があると
env x='() { echo hey;}' bash -c 'x'
# 以下の表示
# hey
env x='() { echo hey;}; echo vulnerable' bash -c 'x'
# 以下の表示
# vulnerable
# hey
# shellshockの脆弱性が対策済みだと
env "BASH_FUNC_x()"='() { echo hey; }' bash -c 'x'
# 以下の表示
# hey
env "BASH_FUNC_x()"='() { echo hey; }; echo vulnerable' bash -c 'x'
# 以下のエラー
# bash: warning: x: ignoring function definition attempt
# bash: error importing function definition for `BASH_FUNC_x'
# bash: x: command not found